Python中的语法错误不一致?
考虑以下两个片段:Python中的语法错误不一致?,python,exception,Python,Exception,考虑以下两个片段: try: a+a=a except SyntaxError: print "first exception caught" 在第二种情况下,会打印“secondexception..”语句(捕获异常),而在第一种情况下不会打印 第一个异常(我们称之为“SyntaxError1”)与第二个异常(“SyntaxError2”)有什么不同吗 是否有任何方法可以捕获SyntaxError1(从而抑制编译时错误)?在eval中包装大块代码不符合要求;) 在第一种情况
try:
a+a=a
except SyntaxError:
print "first exception caught"
在第二种情况下,会打印“secondexception..”语句(捕获异常),而在第一种情况下不会打印
第一个异常(我们称之为“SyntaxError1”)与第二个异常(“SyntaxError2”)有什么不同吗
是否有任何方法可以捕获SyntaxError1(从而抑制编译时错误)?在
eval
中包装大块代码不符合要求;) 在第一种情况下,异常是由编译器引发的,它在try/except
结构存在之前运行(因为在解析之后,编译器本身会立即设置它)。在第二种情况下,编译器运行了两次——在编译器的第一次运行已经设置了try/except
之后,当编译器作为eval
的一部分运行时,会引发异常
因此,为了以某种方式截获语法错误,您必须安排编译器运行两次--eval
是一种方式,显式compile
内置函数调用是另一种方式,import
非常方便(在将代码写入另一个文件之后),exec
和execfile
还有其他可能。但是,无论您如何操作,只有在编译器第一次运行一次以设置所需的try/except
块之后,才能捕获语法错误 简短回答:不
语法错误发生在代码被解析时,对于普通Python代码来说,语法错误发生在代码被执行之前-代码没有在try/except块内执行,因为代码没有执行,句点
但是,当您评估或执行某些代码时,您将在运行时对其进行解析,以便捕获异常。我不知道有多种解决方案。特别是一个显式导入解决了我的隐藏情况优雅。非常感谢,亚历克斯!正在抑制编译时错误????这可能意味着什么?您能为希望解析不可解析代码的用例提供一些定义吗?会发生什么?代码有多糟糕,但仍然可以被“解析”?你们在说什么?问题主要集中在不同情况下抛出的语法错误可能不一致。Alex解释说根本没有不一致性,所有描述的行为都包含在编译器构造try/except的更高层次结构的机制中。一个可能的用例可能是由可信的开发人员*.py文件上传,该文件具有一些功能(简单的插件系统?),上传后需要立即验证其语法。
try:
eval("a+a=a")
except SyntaxError:
print "second exception caught"