考虑以下两个片段:
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中工作不同的原因可能是由于设置了不同的默认编码。您可以通过运行以下命令进行检查: