Python中的语法错误不一致?

2024-10-01 07:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑这两个片段:

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中包装大块代码是不令人满意的;)


Tags: 方法evalexception情况语句firstprintsecond
2条回答

在第一种情况下,异常是由编译器引发的,它在之前运行try/except结构甚至存在(因为在解析之后将由编译器自己设置它)。在第二种情况下,编译器运行了两次,当编译器作为eval的一部分运行时,编译器的第一次运行已经设置了try/except之后,会引发异常

因此,为了以某种方式截获语法错误,您必须安排编译器运行两次eval是一种方式,显式的compile内置函数调用另一种方式,import非常方便(在将代码写入另一个文件之后),execexecfile还有其他可能。但是,无论您如何操作,只有在编译器第一次运行一次以设置所需的try/except块之后,才能捕获语法错误

简短回答:没有

语法错误发生在代码被解析时,对于普通Python代码来说,语法错误发生在代码被执行之前-代码没有在try/except块内执行,因为代码没有执行,句点

但是,当您评估或执行某些代码时,您将在运行时对其进行解析,以便捕获异常

相关问题 更多 >