Python中SyntaxError不一致?

2024-10-04 07:26:16 发布

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

考虑以下两个片段:

try:
    a+a=a
except SyntaxError:
    print "first exception caught"

一。在

^{pr2}$

在第二种情况下,打印“second exception..”语句(捕捉到异常),而在第一种情况下则不打印

第一个异常(我们称之为“SyntaxError1”)和第二个异常(“SyntaxError2”)有什么不同吗?在

有什么方法可以捕获SyntaxError1(从而消除编译时错误)?在eval中包装大代码块不令人满意;)


Tags: 方法错误exception情况语句firstprintsecond
2条回答

简而言之:不

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

但是,当您评估或执行某些程式码时,您会在执行阶段解析它,所以您可以撷取例外状况。在

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

因此,为了截获语法错误,你必须安排编译器运行两次eval是一种方式,显式的compile内置函数调用另一个,import非常方便(在将代码写入另一个文件之后),exec和{}还有其他可能。但是不管你怎么做,语法错误只有在编译器第一次运行以设置你需要的try/except块之后才能被捕获!在

相关问题 更多 >