考虑以下代码:
try:
if True a = 1 #It's missing a colon So it's a SyntaxError!!!!!!!
except SyntaxError:
print 'hey'您可能期望它打印hey,但是它会引发一个SyntaxError,这与我试图避免的错误相同。那么,所有的异常都可以使用try-except块来处理吗?那么,如果SyntaxError是一个例外,为什么它包含在内建例外中呢?最后,我如何修复上面的代码,以便它能够正确地处理异常呢?
注意:我知道我想做的是毫无意义的,没有真正的目的。
发布于 2013-12-28 15:56:40
SyntaxError是一个非常普通的内置例外。这在任何方面都不是特别的。只有当它(通常)被抛出的情况是有点不寻常的。
语法错误意味着所述错误的代码不能被解析为。它甚至没有开始成为一个有效的程序,因此它不能被执行。因此,在程序运行之前会引发SyntaxError异常,因此无法从程序中捕获。
更具体地说,这个异常是由解析器引发的。因为解析器在代码执行之前完全运行,而不是与其交织,所以程序无法捕获自己的语法错误。
不过,解析器本身只是另一个程序:调用解析器的代码可以像每个其他异常一样捕获SyntaxError(因为它与每个其他异常一样)。“调用解析器”的示例包括:
compile,exec,evalimport语句ast,tokenizer,parser等模块中的一些功能。发布于 2013-12-28 15:50:26
当然,当编译器/解析器遇到语法错误时,您需要将SyntaxError作为内置的异常引发什么?
您是对的,这个错误通常发生在编译时,这是在您能够捕获它之前(运行时)。(你如何从这件事中恢复过来?)
不过,我可以想到一个例外:
>>> try:
... eval("hello =")
... except SyntaxError:
... print("Hey! Who's using eval() anyway??")
...
Hey! Who's using eval() anyway??https://stackoverflow.com/questions/20816332
复制相似问题