小编典典

Python中的SyntaxError不一致?

python

考虑以下两个片段:

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是不令人满意的;)


阅读 171

收藏
2020-12-20

共1个答案

小编典典

在第一种情况下,异常是由编译器,这是运行提出 之前try/except结构甚至 存在
(因为它是编译器本身,将解析后马上对其进行设置)。在第二种情况下,编译运行两次-和异常是越来越引发当编译器作为运行的一部分eval之后
的编译器第一次运行已经成立了try/except

因此,要以一种或另一种方式拦截语法错误,您必须安排编译器运行两次-eval一种方式是,显式compile内置函数调用另一种方式,import非常方便(在将代码写入另一个文件之后),exec并且execfile其他可能性呢。但是无论您如何执行,语法错误只有在编译器第一次运行来设置所需的try/except块之后才能捕获!

2020-12-20