【问题标题】:pylint complains on py.test: "Module 'pytest' has no 'raises' member"pylint 在 py.test 上抱怨:“模块 'pytest' 没有 'raises' 成员”
【发布时间】:2012-05-18 05:28:09
【问题描述】:

使用以下代码:

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

【问题讨论】:

  • 如果您能提供您正在使用的 pylint 版本(pylint --version 的输出)以及 py.test 的版本,那将会很有用。
  • @gurneyalex 嗨 Gurney,我已将原始问题更新为包含版本信息。谢谢。

标签: python pylint pytest


【解决方案1】:

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

【讨论】:

  • 这个答案会得到我的支持,但你遗漏了一些我希望看到的信息。选项的正确部分:ignored-classes=pytest 应放在 pylintrc 文件中的 [TYPECHECK] 下。此外,可以将 pylintrc 文件放在几个不同的位置,例如这篇文章:stackoverflow.com/a/16273555/955014
【解决方案2】:

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

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

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

【讨论】:

  • 嗨,亚历克斯。 pytest 不再使用“pylib”动态导入逻辑,因为几年,实际上是 2.0 版。但是,插件可以添加到“pytest.raises”实际发生的“pytest”命名空间中。
  • 感谢@hpk42 的精确。然而,动态添加到 pytest 命名空间是 pylint 静态分析的一个亮点,所以我上面回答中的结论仍然成立。
  • 有没有办法让pytest通知pylint它的命名空间?
  • @hpk42 这将通过一个 astng 插件。有关该主题的简短介绍,请参阅 logilab.org/blogentry/78354。获得帮助的最佳地点是 python-projects@lists.logilab.org,但您可能还想在 freenode 上尝试#pylint
  • 有关旨在为 py.test 提供 pylint 插件的项目,请参阅 bitbucket.org/pfctdayelise/pylint-pytest
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
相关资源
最近更新 更多