我们在构建系统中使用Pylint。
我们的代码库中有一个Python包含有一些临时的代码,我想临时禁用一个模块的所有警告,以便停止向其他开发人员展示这些多余的信息。是否有一种简单的方法可以pylint:disable
一个模块的所有警告?
以下内容来自 Pylint FAQ:
在 Pylint < 0.25 版本中,请添加以下代码:
# pylint: disable-all
在模块的开头。
Pylint 0.26.1及以上版本已将该指令重命名为
# pylint: skip-file
(但第一个版本将保留以保持向后兼容性。)
为了方便查找被忽略的模块,会发出一个信息级别为I0013的消息。如果您使用旧语法,最近的Pylint版本会额外发出一个I0014消息。
C0302
现在是too-many-lines
。但是'C'告诉我们too-many-lines
是一个Convention信息。这很令人困惑,因为Convention信息通常只显示为警告,因为许多系统(如Syntastic)似乎将所有内容分类为警告或错误。然而,Pylint报告仍然将事物分解为这些类别,因此它仍然得到支持。我花费了一些时间才找到答案,但是this answer最终帮助我找到了答案。Pylint仍然支持禁用整个消息类别。因此,要禁用所有警告,你需要执行以下操作:
disable=W
这可以在命令行中使用:
$ pylint --disable=W myfile.py
或者,您可以将它放在您的pylintrc文件中:
[MESSAGES CONTROL]
disable=W
# pylint: disable=W
# pylint: disable=W,C,R
除了上述的关于尾随换行符的消息外,这正好满足了我的需求。
# pylint: disable=W,C,R
,是在代码行末尾使用的一个好方法。 - mikey是的,您可以在文件中指定# pylint: skip-file
,但是禁用文件的所有警告是不好的实践。
如果您只想禁用特定的警告,可以通过添加注释# pylint: disable=message-name
来禁用指定消息,直到文件结束或者使用# pylint: enable=message-name
取消禁用。
例如:
# pylint: disable=no-member
class C123:
def __init__(self):
self.foo_x = self.bar_x
# pylint: enable=no-member
class C456:
def __init__(self):
self.foo_x = self.bar_x
disable=locally-disabled
添加到pylintrc中。 - ColonelFazackerley--ignore
命令行选项来跳过某些文件的分析。pylint *.py
以处理目录中的所有文件,除了我想要跳过一个特定的文件。# pylint: skip-file
会导致Pylint失败,并显示I:8, 0:Ignoring entire file(file-ignored)
。添加# pylint: disable=file-ignored
不能解决这个问题。可能是一个全局错误而不是文件特定的错误。--disable=file-ignored
。花费了太长时间才找到这个解决方案;当您明确忽略一个文件时,就不应该出现file-ignored
错误。pylintrc
配置文件中,而不是作为命令选项。 - Asclepius我刚刚为pytest测试组织成类做了这个,对某些人可能有用。这些测试会引发很多错误,但当我在cli中运行时,我喜欢基于类的结构。
我在所有我的测试文件下方添加了以下导入内容,它似乎可以工作。如果有人知道为整个测试目录执行此操作的解决方案,那可能更好,但如果我可以避免它,我不想忽略整个repo。
# Disable pylint errors for tests organised into classes
# pylint: disable=no-self-use too-few-public-methods
# Disable pylint errors for pytest fixtures
# pylint: disable=unused-argument invalid-name
使用两次没有出现任何问题,我进行了确认。最初我尝试使用括号来禁用两行,但不起作用。我不需要逗号,所以把它们删除了。
如果有人知道可以标记组织测试类等效于@dataclass的装饰器,请告诉我。