从 eval() 捕获语法错误
考虑以下代码片段:
<code class="python">try: a+a=a except SyntaxError: print("first exception caught")</code>
<code class="python">try: eval("a+a=a") except SyntaxError: print("second exception caught")</code>
中在第二种情况下,会打印“第二个异常...”语句(捕获异常),而在第一种情况下则不会。引发的两个语法错误(“SyntaxError1”和“SyntaxError2”)是否不同?有没有办法捕获“SyntaxError1”(从而抑制编译时错误)?
答案
“SyntaxError1”和“SyntaxError2”之间的区别在于它们发生的时间。在创建 try/ except 块之前,编译器会引发“SyntaxError1”,而在设置 try/ except 块之后,当编译器作为 eval() 的一部分运行时,会引发“SyntaxError2”。
为了捕获语法错误,包括“SyntaxError1”,编译器必须运行两次。 eval() 是实现此目的的一种方法。其他选项包括:
通过强制编译器运行两次,可以捕获语法错误并通过 try/ except 块处理它们。
以上是你能在`eval()`之前捕获语法错误吗?的详细内容。更多信息请关注PHP中文网其他相关文章!