Try-catch с exec [duplicate]

import pandas as pd 
t1=pd.DataFrame()
for i in range(len(the number of rows)):
    #add rows as columns
    t1[i]=list(rows)
t1=t1.transpose()
t1.columns=list(columns)
12
задан gorsky 6 December 2009 в 21:15
поделиться

2 ответа

В первом случае исключение возникает компилятором, который работает до , структура try/except существует даже существует (так как это сам компилятор, который установит это сразу после разбора). Во втором случае компилятор работает дважды - и возникает исключение, когда компилятор работает как часть eval, после , первый запуск компилятора уже настроил try/except.

Итак, чтобы перехватывать синтаксические ошибки, так или иначе, вам нужно организовать выполнение компилятора дважды - eval - это один способ, явная функция compile вызывает другую функцию , import весьма удобен (после написания кода в другой файл), exec и execfile другие возможности. Но, тем не менее, вы это делаете, синтаксические ошибки могут быть обнаружены только после того, как компилятор первым запустил настройку блоков try/except, которые вам нужны!

17
ответ дан Alex Martelli 24 August 2018 в 00:30
поделиться
  • 1
    Я не знал о различных решениях. Особенно с явным импортом решает мой скрытый случай элегантно. Большое спасибо, Алекс! – gorsky 6 December 2009 в 21:19

Краткий ответ: Нет.

Синтаксические ошибки возникают, когда код разобран, что для обычного кода Python перед выполнением кода - код не выполняется внутри блока try / except, поскольку код не выполняется, период.

Однако, когда вы eval или выполняете какой-то код, вы анализируете его во время выполнения, поэтому вы можете поймать исключение.

2
ответ дан Dave Kirby 24 August 2018 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: