无法捕获语法错误python [重复]


问题内容

这个问题已经在这里有了答案

Python中的SyntaxError不一致? (2个答案)

3年前关闭。

try:
    x===x
except SyntaxError:
    print "You cannot do that"

输出

    x===x
       ^
SyntaxError: invalid syntax

这也没有抓住

try:
    x===x
except:
    print "You cannot do that"

其他错误,例如NameError,ValueError,都是可捕获的。

有什么想法吗?

系统规格:

import sys
print(sys.version)

-> 2.7.5(默认值,2014年3月9日,22:15:05)[GCC 4.2.1兼容的Apple LLVM 5.0(clang-500.0.68)]


问题答案:

你也只能望尘莫及SyntaxError,如果它抛出的出来evalexecimport操作。

>>> try:
...    eval('x === x')
... except SyntaxError:
...    print "You cannot do that"
... 
You cannot do that

这是因为,通常,解释器会在执行任何 文件 之前先解析 整个文件 ,因此它会在try执行语句之前检测到语法错误。但是,如果 在程序执行期间
使用eval或它的朋友使更多代码被解析,则可以捕获它。 __

我敢肯定这在官方手册中的某个地方,但我现在找不到。