考虑以下两个片段:
try:
a+a=a
except SyntaxError:
print "first exception caught"
一。在
^{pr2}$
在第二种情况下,打印“second exception..”语句(捕捉到异常),而在第一种情况下则不打印
第一个异常(我们称之为“SyntaxError1”)和第二个异常(“SyntaxError2”)有什么不同吗?在
有什么方法可以捕获SyntaxError1(从而消除编译时错误)?在eval
中包装大代码块不令人满意;)
Tags:
简而言之:不
语法错误发生在代码被解析时,对于普通的Python代码来说,语法错误发生在代码执行之前-代码没有在try/except块内执行,因为代码没有执行,句点。在
但是,当您评估或执行某些程式码时,您会在执行阶段解析它,所以您可以撷取例外状况。在
在第一种情况下,编译器引发异常,它在之前运行
try/except
结构,甚至也存在于(因为编译器本身将在解析后立即设置它)。在第二种情况下,编译器运行两次,当编译器作为eval
的一部分运行时,在之后,编译器的第一次运行已经设置了try/except
。在因此,为了截获语法错误,你必须安排编译器运行两次}还有其他可能。但是不管你怎么做,语法错误只有在编译器第一次运行以设置你需要的
eval
是一种方式,显式的compile
内置函数调用另一个,import
非常方便(在将代码写入另一个文件之后),exec
和{try/except
块之后才能被捕获!在相关问题 更多 >
编程相关推荐