当前位置: 首页 > 面试题库 >

Python中的SyntaxError不一致?

曹沛
2023-03-14
问题内容

考虑以下两个片段:

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是不令人满意的;)


问题答案:

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

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



 类似资料:
  • 问题内容: 我正在尝试使用pip安装软件包。我尝试 运行,但是得到了。为什么会出现此错误?如何使用pip安装软件包? 问题答案: 是从命令行而不是Python解释器运行的。这是一个安装模块的程序,因此你可以从Python使用它们。安装模块后,即可打开Python shell并执行。 不是命令行,而是一个交互式解释器。你在其中键入代码,而不是命令。

  • 问题内容: 根据python文档,自python 2.5开始支持相对导入和内部包引用。我当前正在运行Python 2.7.3。因此,我尝试在自己的程序包中实现此功能,以便将其用于更简单的导入。我很惊讶地发现它引发了SyntaxError异常,我希望有人可以帮助您找到原因。 我设置了一个测试目录进行测试: 两个__init__.py模块都为空。其他模块是: 当我尝试导入second_level模块时

  • 问题内容: 当我从.py文件尝试此代码时,此代码有效,但在命令行解释器和Idle中失败。 我正在使用python 2.6 问题答案: 对于Python 3,它是一个函数而不是语句,因此,如果您使用的是Python 3,则需要在参数周围加上括号,如中所示。 但是,插入符号指向的位置比使用Python 3的位置早,因此您必须使用Python2.x。在这种情况下,错误是因为您要在交互式解释器中输入此内容

  • 我对Node有些陌生,我正在运行一个非常简单的示例https://javascript.info/import-export在节点(10.17.0)中检查导入功能。 function.js 我是这样称呼的: 说js 但由于某种原因,当我运行(在命令行上)时 它回来了 大概是很基础的,但是我看不出我在这里做错了什么。

  • 问题内容: 我要访问的文件夹称为python,位于我的桌面上。 尝试获取以下错误 问题答案: 你需要使用原始字符串,将斜杠加倍或使用正斜杠: 在常规python字符串中,字符组合表示扩展的代码点转义。 对于任何已识别的转义序列,例如或等,你都可以遇到许多其他问题。

  • 问题内容: 我正在尝试解析包含某些非ASCII字符的xml, 代码如下 但它在行“ content = …”上显示了错误,例如 在终端中它正在工作,但是在Eclipse IDE上运行时却给我一个错误。 不知道该如何克服。 问题答案: 您应该定义源代码编码,并将其添加到脚本顶部: 它在控制台和IDE中工作不同的原因可能是由于设置了不同的默认编码。您可以通过运行以下命令进行检查: