Python中的SyntaxError不一致?
考虑以下两个片段:
try:
a+a=a
except SyntaxError:
print "first exception caught"
。
try:
eval("a+a=a")
except SyntaxError:
print "second exception caught"
在第二种情况下,将打印“第二个异常..”语句(捕获到异常),而在第一种情况下,则不会打印。
第一个异常(我们称其为“ SyntaxError1”)与第二个异常(“ SyntaxError2”)有什么不同吗?
有什么办法可以捕获SyntaxError1(从而抑制编译时错误)?在其中包装大量代码eval
是不令人满意的;)
-
在第一种情况下,异常是由编译器,这是运行提出 之前 的
try/except
结构甚至 存在
(因为它是编译器本身,将解析后马上对其进行设置)。在第二种情况下,编译运行两次-和异常是越来越引发当编译器作为运行的一部分eval
, 之后
的编译器第一次运行已经成立了try/except
。因此,要以一种或另一种方式拦截语法错误,您必须安排编译器运行两次-
eval
一种方式是,显式compile
内置函数调用另一种方式,import
非常方便(在将代码写入另一个文件之后),exec
并且execfile
其他可能性呢。但是无论您如何执行,语法错误只有在编译器第一次运行来设置所需的try/except
块之后才能捕获!