在第一种情况下,异常是由编译器,这是运行提出 之前 的try/except
结构甚至 存在 (因为它是编译器本身,将解析后马上对其进行设置)。在第二种情况下,编译运行两次-和异常是越来越引发当编译器作为运行的一部分eval
, 之后 的编译器第一次运行已经成立了try/except
。
因此,要以一种或另一种方式拦截语法错误,您必须安排编译器运行两次-eval
一种方式是,显式compile
内置函数调用另一种方式,import
非常方便(在将代码写入另一个文件之后),exec
并且execfile
其他可能性呢。但是无论您如何执行,语法错误只有在编译器第一次运行来设置所需的try/except
块之后才能捕获!