我在看这个最小的有效(?)节目:
import sys
def f():
try:
raise Exception()
except Exception:
raise Exception(), None, sys.exc_info()[2]
f()该程序按预期执行和运行,保持内部异常的堆栈跟踪,如help("raise")所述。但是,当我在上面运行pylint时,我得到的是:
$ pylint program.py
************* Module tmp
E: 7, 0: invalid syntax (<string>, line 7) (syntax-error)当我将第二个和第三个表达式移到raise时,语法错误就消失了。
,这是一个错误在潘林特,还是我忽略了什么?
发布于 2017-09-25 08:38:39
对于Python3语法的pylint二进制测试,您的代码仅对Python 2有效。Pylint测试代码遵循您安装的Python二进制代码的语法(它使用Python自己的解析器)。
在Python 3中,您可以使用:
raise Exception().with_traceback(sys.exc_info()[2])请参阅Python3的 statement文档。
虽然您的语法在Python2中可能是正确的,但从技术上讲,您使用raise是错误的。当传入3个元素时,第一个元素必须是类,而不是实例。第二个是该类的实例,第三个是回溯:
raise Exception, Exception(), sys.exc_info()[2]或者您可以传入None,以获得传递给第一个(类)以创建实例的空参数列表:
raise Exception, None, sys.exc_info()[2]您的代码仍然正常工作,但这只是因为Python并不太严格,当它不是类时,将第一个参数作为实例。
如果您想用pylint测试Python 2代码,请在Python2二进制文件中安装一个副本,然后运行该版本。请参阅Specify which python version pylint should evaluate for
https://stackoverflow.com/questions/46400881
复制相似问题