Python中的SyntaxError不一致?

发布于 2021-01-29 19:34:01

考虑以下两个片段:

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

try:
    eval("a+a=a")
except SyntaxError:
    print "second exception caught"

在第二种情况下,将打印“第二个异常..”语句(捕获到异常),而在第一种情况下,则不会打印。

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

有什么办法可以捕获SyntaxError1(从而抑制编译时错误)?在其中包装大量代码eval是不令人满意的;)

关注者
0
被浏览
60
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    在第一种情况下,异常是由编译器,这是运行提出 之前try/except结构甚至 存在
    (因为它是编译器本身,将解析后马上对其进行设置)。在第二种情况下,编译运行两次-和异常是越来越引发当编译器作为运行的一部分eval之后
    的编译器第一次运行已经成立了try/except

    因此,要以一种或另一种方式拦截语法错误,您必须安排编译器运行两次-eval一种方式是,显式compile内置函数调用另一种方式,import非常方便(在将代码写入另一个文件之后),exec并且execfile其他可能性呢。但是无论您如何执行,语法错误只有在编译器第一次运行来设置所需的try/except块之后才能捕获!



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看