捕获由 Eval 代码引发的语法错误
在 Python 中,可以捕获由 eval( 计算的代码引发的语法错误) )函数,但不是由源代码本身。这种行为的出现是由于每种情况下编译器参与时的时间戳不同。
编译器执行与 Try/Except 块
在第一个代码片段中,当语法错误发生在 a=a 中,编译器甚至在执行 try/ except 块之前引发异常。本质上,编译器会检测到错误并阻止程序进一步运行。
但是,在使用 eval() 的第二个片段中,编译器执行了两次。初始编译没有检测到错误并设置了 try/ except 块。当调用 eval() 时,编译器会重新编译 eval() 语句中的代码,从而导致语法错误。此错误发生在 try/ except 块建立之后,允许其捕获异常。
拦截语法错误
要捕获任何语法错误,您必须使用一种涉及运行编译器两次的技术。这可以通过多种方式实现:
限制
虽然这些方法可以提供帮助拦截语法错误,它们带有警告。在编译器初始执行设置 try/ except 块之前无法捕获语法错误。因此,在尝试捕获任何错误(即使是动态捕获)之前,确保代码语法正确非常重要。
以上是为什么 Python 的 `try/ except` 不能在源代码中捕获语法错误,但可以在 `eval()` 代码中捕获它们?的详细内容。更多信息请关注PHP中文网其他相关文章!