使用nose.tools并保持pylint快乐的正确方法是什么?
以下代码:
'''
This is a test
'''
import nose.tools
import nose.tools.trivial
nose.tools.assert_equal(1, 1)
nose.tools.assert_equals(1, 1)
nose.tools.trivial.assert_equal(1, 1)
nose.tools.trivial.assert_equals(1, 1)
导致以下pylint错误:
$ pylint -i y -r n /tmp/aseq.py
************* Module aseq
E1101: 8,0: Module 'nose.tools' has no 'assert_equal' member
E1101: 9,0: Module 'nose.tools' has no 'assert_equals' member
E1101: 11,0: Module 'nose.tools.trivial' has no 'assert_equal' member
E1101: 12,0: Module 'nose.tools.trivial' has no 'assert_equals' member
当然,人们可以禁用E1101,有更清洁的方式吗?
答案 0 :(得分:4)
您应该输入:
,而不是禁用E1101ignored-classes=nose.tools,nose.tools.trivial
在[TYPECHECK]
部分的.pylintrc中。
它位于pylint doc中,此选项“对于具有动态设置属性的类非常有用”。
答案 1 :(得分:2)
nose.tools.trivial
只需动态检查unittest.TestCase
课程,并从assert
或nose.tools
{/ 1}开始提供nose.tools.trivial
所有“公开”方法:
鼻子/工具/ __ INIT __ PY:
from nose.tools.nontrivial import *
from nose.tools.nontrivial import __all__ as nontrivial_all
from nose.tools.trivial import *
from nose.tools.trivial import __all__ as trivial_all
__all__ = trivial_all + nontrivial_all
鼻子/工具/ trivial.py:
...
class Dummy(unittest.TestCase):
def nop():
pass
_t = Dummy('nop')
for at in [ at for at in dir(_t)
if at.startswith('assert') and not '_' in at ]:
pepd = pep8(at)
vars()[pepd] = getattr(_t, at)
__all__.append(pepd)
...
Pylint无法处理这种“hacky”行为。
考虑使用nose.tools.eq_
代替assert_equal
和assert_equals
(这些方法实际上是相同的)。希望有所帮助。
答案 2 :(得分:1)
Pylint不了解鼻子底层的魔法。如建议的那样,解决方案包括禁用E1101或忽略相关类。但最好是通过提交Pylint未掌握的API部分的简单描述来为pylint-brain project做出贡献。从您在那里找到的文档和示例中,这应该非常简单。
答案 3 :(得分:0)
使用pylint 1.4.3(使用astroid 1.3.6,通用0.63.2,Python 2.7.10),必须更改的设置为ignored-modules
,而不是ignored-classes
:
ignored-modules=nose.tools,nose.tools.trivial
答案 4 :(得分:0)