可以处理语法错误吗?

K D*_*awG 14 python exception-handling python-2.7

请考虑以下代码:

try:
    if True a = 1  #It's missing a colon So it's a SyntaxError!!!!!!!
except SyntaxError:
    print 'hey'
Run Code Online (Sandbox Code Playgroud)

你希望它打印hey但是它提出了一个SyntaxError,我试图避免的同样的错误.那么可以使用try-except块来处理所有异常吗?好吧,如果SyntaxError它是一个例外,为什么它包含在内置异常中?最后,我如何修复上面的代码,以便正确处理异常?

注意:我知道我要做的事情完全没有意义,并没有真正的目的

小智 23

SyntaxError是一个完全普通的内置异常.它没有任何特殊之处.只有它(通常)抛出的情况才有点不寻常.

语法错误意味着无法解析具有所述错误的代码.它甚至没有开始成为有效的程序,因此无法执行.因此,在程序运行之前SyntaxError会引发异常,因此无法从程序中捕获异常.

更具体地说,解析器引发了这个异常.因为解析器在执行代码之前完全运行,而不是与代码交错,所以程序无法捕获自己的语法错误.

解析器本身只是一个程序,但:代码调用解析器可以赶上SyntaxError就像所有其他异常(因为它像其他的除外)."调用解析器"的示例包括:

  • compile,exec,eval
  • import 声明
  • 在像模块几个功能ast,tokenizer,parser等.


Tim*_*ker 7

当然,您需要SyntaxError作为内置异常 - 如果编译器/解析器遇到语法错误,还应该引发什么?

你是对的,这个错误通常发生在编译时,这是在你能够捕获它(运行时)之前.(你将如何从中恢复?)

不过我可以想到一个例外:

>>> try:
...    eval("hello =")
... except SyntaxError:
...    print("Hey! Who's using eval() anyway??")
...
Hey! Who's using eval() anyway??
Run Code Online (Sandbox Code Playgroud)