考虑这两个片段:
try:
a+a=a
except SyntaxError:
print "first exception caught"
try:
eval("a+a=a")
except SyntaxError:
print "second exception caught"
在第二种情况下,会打印“secondexception..”语句(捕获异常),而在第一种情况下不会打印
第一个异常(我们称之为“SyntaxError1”)与第二个异常(“SyntaxError2”)有什么不同吗
是否有任何方法可以捕获SyntaxError1(从而抑制编译时错误)?在eval
中包装大块代码是不令人满意的;)
在第一种情况下,异常是由编译器引发的,它在之前运行,
try/except
结构甚至存在(因为在解析之后将由编译器自己设置它)。在第二种情况下,编译器运行了两次,当编译器作为eval
的一部分运行时,在编译器的第一次运行已经设置了try/except
之后,会引发异常因此,为了以某种方式截获语法错误,您必须安排编译器运行两次
eval
是一种方式,显式的compile
内置函数调用另一种方式,import
非常方便(在将代码写入另一个文件之后),exec
和execfile
还有其他可能。但是,无论您如何操作,只有在编译器第一次运行一次以设置所需的try/except
块之后,才能捕获语法错误简短回答:没有
语法错误发生在代码被解析时,对于普通Python代码来说,语法错误发生在代码被执行之前-代码没有在try/except块内执行,因为代码没有执行,句点
但是,当您评估或执行某些代码时,您将在运行时对其进行解析,以便捕获异常
相关问题 更多 >
编程相关推荐