pylint抱怨py.test:“模块'pytest'没有'加注'成员”

时间:2012-05-18 05:28:09

标签: 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

这显然不是真的。知道为什么pylint犯了这样的错误吗?这是一个已知的错误吗?

py.test版本:

> py.test --version
This is py.test version 2.2.3, imported from C:\Python27\lib\site-packages\pytest.pyc

PyLint版本:

> 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)]

2 个答案:

答案 0 :(得分:3)

上次我看起来pylib在低级python中做了一些重要的动态,比如完全重新定义了导入代码。很可能这完全阻碍了pylint / astng,并阻止它获取pytest模块中的内容:pylint / astng不会导入它分析的代码,它会解析它,这意味着在导入时动态初始化的东西将会通常会被忽视,这反过来会产生误报,例如您报告的误报。

从那里,您将面临以下选择:

  • 使用另一个单元测试框架,比py.test
  • 更不动态
  • 手动清除测试代码上的警告/错误
  • 在py.test上使用另一个比pylint更快乐的linter(我很想知道pychecker / pyflakes在该代码上的表现如何)
  • 编写astng插件,这将有助于解决pylib技巧,并将其作为补丁提交给astng维护者(并从中获得额外的功劳)

答案 1 :(得分:3)

您可以在pylintrc文件中将其静音: ignored-classes=pytest