Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pylint在py.test上投诉:“py.test”;模块';pytest';没有';提高';“成员”;_Python_Pylint_Pytest - Fatal编程技术网

Python pylint在py.test上投诉:“py.test”;模块';pytest';没有';提高';“成员”;

Python pylint在py.test上投诉:“py.test”;模块';pytest';没有';提高';“成员”;,python,pylint,pytest,Python,Pylint,Pytest,使用以下代码: import pytest def test_a(): with pytest.raises(Exception): 1/0 如果我在其上运行pylint,它会抱怨“raises”不是模块pytest的成员: E: 3,9:test_a: Module 'pytest' has no 'raises' member 这显然不是真的。知道派林为什么会犯这样的错误吗?这是已知的bug吗 py.test版本: > py.test --version

使用以下代码:

import pytest
def test_a():
    with pytest.raises(Exception):
        1/0
如果我在其上运行pylint,它会抱怨“raises”不是模块pytest的成员:

E:  3,9:test_a: Module 'pytest' has no 'raises' member
这显然不是真的。知道派林为什么会犯这样的错误吗?这是已知的bug吗

py.test版本:

> py.test --version
This is py.test version 2.2.3, imported from C:\Python27\lib\site-packages\pytest.pyc
> pylint --version
No config file found, using default configuration
pylint 0.25.1,
astng 0.23.1, common 0.57.1
Python 2.7.2 (default, Jun 24 2011, 12:22:14) [MSC v.1500 64 bit (AMD64)]
派林版本:

> py.test --version
This is py.test version 2.2.3, imported from C:\Python27\lib\site-packages\pytest.pyc
> pylint --version
No config file found, using default configuration
pylint 0.25.1,
astng 0.23.1, common 0.57.1
Python 2.7.2 (default, Jun 24 2011, 12:22:14) [MSC v.1500 64 bit (AMD64)]

上次我查看pylib时,它在底层python中做了一些繁重的动态工作,比如完全重新定义导入代码。很可能这完全阻碍了pylint/astng,并阻止它获取pytest模块中的内容:pylint/astng不导入它分析的代码,而是解析它,这意味着在导入时动态初始化的内容通常不会被注意到,这反过来会产生误报,比如您报告的误报

在此之后,您将面临以下选择:

  • 使用另一个unittest框架,比py.test动态性更低
  • 手动关闭测试代码上的警告/错误
  • 在py.test上使用另一个比pylint更快乐的linter(我想知道pychecker/pyflakes在该代码中的表现如何)
  • 编写astng插件,帮助astng摸索pylib技巧,并将其作为补丁提交给astng维护人员(并从中获得额外的积分)

您可以在pylintrc文件中使用以下命令使其静音:
ignored classes=pytest

如果您可以提供您正在使用的pylint版本(pylint的输出--version),以及py.test的版本,这将非常有用。@gurneyalex嗨,Gurney,我已经更新了原始问题,以包含版本信息。谢谢,嘿,亚历克斯。pytest不再使用“pylib”动态导入逻辑,因为几年前,版本2.0实际上已经存在。但是,允许插件添加到“pytest”名称空间中,这实际上是“pytest.raises”的名称空间。感谢@hpk42的精确性。然而,动态添加到pytest名称空间是pylint静态分析的一个障碍,因此我在上面的回答中的结论仍然有效。pytest是否有办法通知pylint其名称空间?@hpk42这将通过astng插件实现。有关此主题的简短介绍,请参阅。获取帮助的最佳位置是python-projects@lists.logilab.org但是你也可能想在freenodeSee上尝试一下#pylint,该项目旨在为py.test提供一个pylint插件。这个答案本应得到我的支持,但你遗漏了一些我希望看到的信息。选项的正确部分:
ignored classes=pytest
应放在pylintrc文件的
[TYPECHECK]
下。此外,pylintrc文件可以放在几个不同的位置,如本文所示: