为什么用户代码不能捕获SyntaxError?

时间:2015-05-15 09:40:05

标签: python python-2.7 exception-handling

我想捕获每个程序错误,以便我可以在我的GUI程序中显示这些错误,但我发现我无法捕获某些类型的错误,如SyntaxError和IndentError。

例如:

import traceback

zero = 0

try:
    print "start..."
v = 3/zero # deliberately no indention, SyntaxError cannot be caught

except:
    print "Oooooooooooooops"
    traceback.print_exc()
    exit(1)

print "run ok"

控制台输出是:

  File "D:\w\personal\chj\python-try\catch-syntaxerror\catch_syntax_err.py", line 8
    v = 3/zero # ``SyntaxError: invalid syntax``, cannot be catched by user
    ^
SyntaxError: invalid syntax

所以,我知道我自己没有抓住这个例外。

我怎样才能抓住它?

1 个答案:

答案 0 :(得分:2)

在实际运行代码之前抛出SyntaxError。特别是你的错误处理程序还没有被创建执行。

(你会注意到,如果你的代码中有任何产生输出的东西,比如print语句,那么当语法出现问题时,不会产生输出,无论它们在代码中的哪个位置) 。

但是在您描述的用例中,我真的不明白为什么需要捕获SyntaxError。在我看来,你想要捕捉取决于程序状态的错误。 SyntaxError不会弹出意外。如果您能够运行一次程序,则在以后的调用中不会出现SyntaxError(当然,除非您更改代码)。

相关问题