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