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,evalimport 声明ast,tokenizer,parser等.当然,您需要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)
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |