首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效程序上的pylint语法错误(用三个参数/表达式引发)

有效程序上的pylint语法错误(用三个参数/表达式引发)
EN

Stack Overflow用户
提问于 2017-09-25 08:37:07
回答 1查看 1.3K关注 0票数 1

我在看这个最小的有效(?)节目:

代码语言:javascript
复制
import sys

def f():
    try:
        raise Exception()
    except Exception:
        raise Exception(), None, sys.exc_info()[2]

f()

该程序按预期执行和运行,保持内部异常的堆栈跟踪,如help("raise")所述。但是,当我在上面运行pylint时,我得到的是:

代码语言:javascript
复制
$ pylint program.py 
************* Module tmp
E:  7, 0: invalid syntax (<string>, line 7) (syntax-error)

当我将第二个和第三个表达式移到raise时,语法错误就消失了。

,这是一个错误在潘林特,还是我忽略了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-25 08:38:39

对于Python3语法的pylint二进制测试,您的代码仅对Python 2有效。Pylint测试代码遵循您安装的Python二进制代码的语法(它使用Python自己的解析器)。

在Python 3中,您可以使用:

代码语言:javascript
复制
raise Exception().with_traceback(sys.exc_info()[2])

请参阅Python3的 statement文档。

虽然您的语法在Python2中可能是正确的,但从技术上讲,您使用raise是错误的。当传入3个元素时,第一个元素必须是类,而不是实例。第二个是该类的实例,第三个是回溯:

代码语言:javascript
复制
raise Exception, Exception(), sys.exc_info()[2]

或者您可以传入None,以获得传递给第一个(类)以创建实例的空参数列表:

代码语言:javascript
复制
raise Exception, None, sys.exc_info()[2]

您的代码仍然正常工作,但这只是因为Python并不太严格,当它不是类时,将第一个参数作为实例。

如果您想用pylint测试Python 2代码,请在Python2二进制文件中安装一个副本,然后运行该版本。请参阅Specify which python version pylint should evaluate for

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46400881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档