我们在构建系统中使用pylint。我们在代码库中有一个包含可丢弃代码的python程序包,我想暂时禁用该模块的所有警告,以便不再用这些多余的消息来烦扰其他开发人员。是否有一种简单的方法来pylint: disable
处理模块的所有警告?
Answers:
当Pylint <0.25时,添加
# pylint: disable-all
在模块的开头。
Pylint 0.26.1及更高版本已将该指令重命名为
# pylint: skip-file
(但为了保持向后兼容性,将保留第一个版本)。
为了便于查找哪些模块被忽略,发出了信息级消息I0013。在最新版本的Pylint中,如果使用旧语法,则会发出附加的I0014消息。
PyLint有五个用于消息的“类别”(据我所知)。
这些类别在过去非常明显,但是编号的Pylint消息现在已被名称替换。例如,C0302
现在too-many-lines
。但是“ C”告诉我们这too-many-lines
是一个公约信息。这令人困惑,因为Conventional消息经常只是显示为警告,因为许多系统(例如Syntastic)似乎将所有内容归类为警告或错误。但是,PyLint报告仍然将这些事件细分为这些类别,因此仍然可以肯定地支持它。
您的问题专门针对警告,所有PyLint警告消息名称均以'W'开头。
我很难找到答案,但是这个答案最终使我找到了答案。PyLint仍然支持禁用所有类别的消息。因此,要禁用所有警告,您可以执行以下操作:
disable=W
可以在命令行中使用:
$ pylint --disable=W myfile.py
或者,您可以将其放在您的pylintrc文件中:
[MESSAGES CONTROL]
disable=W
注意:您disable
的rc文件中可能已经有该选项,在这种情况下,您应该在此列表后附加“ W”。
或者,您可以将其内联到您的代码中,在该代码中将对其放置的范围起作用:
# pylint: disable=W
要禁用整个文件,最好将其放在文件的最顶部。但是,即使在文件的最顶部,我仍然发现trailing-newlines
警告消息(从技术上讲是一种常规警告,但我已经明白了)。
就我而言,我有一个很久以前的人编写的图书馆。它运行良好,因此实际上不必担心现代Python约定等。我真正关心的只是可能会破坏我的代码的错误。
我的解决方案是仅通过在第一行上放置以下PyLint命令来禁用此文件的所有Warning,Convention和Refactoring消息:
# pylint: disable=W,C,R
除了前面提到的用于换行符的消息外,这确实满足了我的需要。
是的,您可以指定# pylint: skip-file
,但是禁用文件的所有警告是一种不好的做法。在由pylint分析的分支中不应存在可丢弃代码。
如果您只想禁用特定的警告,可以通过添加注释# 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中。
我的用例是运行pylint *.py
以处理目录中的所有文件,但我要跳过一个特定的文件。
添加会#pylint: skip-file
导致pylint失败I: 8, 0: Ignoring entire file (file-ignored)
。添加#pylint: disable=file-ignored
并不能解决该问题。据推测,这是一个全局错误,而不是特定于文件的错误。
解决方案是--disable=file-ignored
在pylint命令选项中包含。解决这个问题花了太长时间。file-ignored
当您显式忽略文件时,应该没有错误。
pylintrc
配置文件中,而不是在命令选项中。