如何禁用Pylint警告?
我试图禁用警告C0321(“在一条线上多于一条语句” – 我经常在同一行中input简短的单行结果的语句),在Pylint 0.21.1(如果重要的话:astng 0.20 .1,常见的0.50.3,Python 2.6.6(r266:84292,2010年9月15日,16:22:56))。
我已经尝试在disable=C0321
configuration文件中添加disable=C0321
,但Pylint坚持要报告它。 该行的变化(如disable=0321
或disable=C321
)被标记为错误,所以Pylint 确实认识到这个选项,它只是忽略它。
这是一个Pylint错误,还是我做错了什么? 有没有办法解决? 我真的很想摆脱一些这种噪音。
pylint --generate-rcfile
显示如下:
[MESSAGES CONTROL] # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option # multiple time. #enable= # Disable the message, report, category or checker with the given id(s). You # can either give multiple identifier separated by comma (,) or put this option # multiple time (only on the command line, not in the configuration file where # it should appear only once). #disable=
所以它看起来像你的~/.pylintrc
应该有一个节[MESSAGES CONTROL]
内的disable=
行/秒。
我有这个问题,使用Eclipse并解决它,如下所示:
在pylint文件夹(例如C:\ Python26 \ Lib \ site-packages \ pylint)中,按住shift,右键单击并select打开该文件夹中的Windows命令。 types:
lint.py --generate-rcfile > standard.rc
这将创build“standard.rc”configuration文件。 打开它在记事本和'[信息控制]',取消注释'禁用=',并添加您要禁用的消息ID,例如:
disable=W0511, C0321
保存文件,在Eclipse-> window-> preferences-> PyDev-> pylint,在参数框中input:
--rcfile=C:\Python26\Lib\site-packages\pylint\standard.rc
现在它应该工作…
你也可以在你的代码的顶部添加一个注释 ,该注释将被pylint解释:
# pylint: disable=C0321
链接到所有的pylint消息代码
在参数框中添加例如--disable-ids=C0321
不起作用。 所有可用的pylint消息都存储在字典'_messages'中, pylint.utils.MessagesHandlerMixIn
类的一个实例的属性。 当使用参数--disable-ids=...
(至less没有configuration文件)运行pylint时,这个字典最初是空的,在pylint中引发了一个KeyErrorexception(pylint.utils.MessagesHandlerMixIn.check_message_id()你可以在Pylint控制台中看到这个错误信息(windows – 显示视图 – 控制台,除了控制台图标,还可以从控制台选项中selectPylint控制台。)
从Pylint v。0.25.3开始,您可以使用符号名称作为消息, 而不是记住所有这些代码号码 。 例如:
# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long
上面的注释可以插入到要应用的行的末尾。 在这种情况下, 首先像上面那样包括locally-disabled
,否则pylint可能会包含“ Locally disabling
”消息。 但是,如果您接收到useless-suppression
消息,请删除locally-disabled
消息。
这种风格是比禁用错误代码更实用,特别是因为较新版本的Pylint只输出符号名称,而不是错误代码。
要在块中本地禁用警告,请添加
# pylint: disable=C0321
到那个街区
有几种方法可以禁用Pylint的警告和错误。 使用哪一个与全球或本地如何应用残疾人有关 – 这是一个重要的devise决定。
多种方法
- 在一个或多个
pylintrc
文件中。
这涉及的不仅仅是Chris Morgan所描述的~/.pylintrc
文件(在你的$ HOME目录中)。 Pylint将searchrc文件,优先级更高的“更接近”文件:
-
当前工作目录下的
pylintrc
文件; 要么 -
如果当前工作目录位于Python模块(即包含
__init__.py
文件)中,则searchPython模块的层次结构,直到findpylintrc
文件; 要么 -
由环境variablesPYLINTRC命名的文件; 要么
-
如果您的主目录不是
/root
:-
~/.pylintrc
; 要么 -
~/.config/pylintrc
; 要么 -
/etc/pylintrc
-
请注意,大多数这些文件被命名为pylintrc
– 只有~
的文件有一个前导点。
到你的pylintrc
文件,添加行来禁用特定的pylint消息。 例如:
[MESSAGES CONTROL] disable=locally-disabled
-
进一步禁用
pylint
命令行,如Aboo和Cairnarvon所述。 这看起来像pylint --disable=bad-builtin
。 重复 – 禁止其他项目。 -
进一步禁用单个Python代码行,如Imolit所述。 这些看起来像
some statement # pylint: disable=broad-except
(对原始源代码行的末尾的额外注释), 只适用于当前行 。 我的方法是始终把这些放在其他代码行的末尾,这样它们就不会与块的风格混淆,见下文。 -
进一步禁用为较大的Python代码块定义,直到完成源文件。
-
这些看起来像
# pragma pylint: disable=bad-whitespace
(注意pragma
关键字)。 -
这些适用于编译之后的每一行 。 把这些文件放在文件的顶部使压抑适用于整个文件。 将相同的块放在文件中使它们只适用于块后面的行。 我的方法是始终把它们放在自己的路线上,这样就不会混淆单线式的风格。
-
当一个抑制只适用于一段代码时,使用
# pragma pylint: enable=bad-whitespace
(现在使用enable
notdisable
)来停止抑制。
-
请注意,对于单行禁用使用# pylint
语法,而禁用此行时使用# pragma pylint
语法。 这些很容易混淆,特别是在复制和粘贴时。
把它放在一起
我通常使用这些方法的组合。
-
我使用
~/.pylintrc
绝对全球标准 – 这些很less。 -
当有项目特定的标准时,我在Python模块的不同级别使用项目级别的
pylintrc
。 特别是当你从另一个人或团队获取代码时,你可能会发现他们使用了你不喜欢的约定,但你不想重写代码。 保持这个级别的设置有助于不将这些做法传播到其他项目。 -
我使用单个源文件顶部的块样式杂注。 我喜欢在发展的热潮中closures编译器(停止压缩消息),即使对于Pylint标准我也不同意(比如“太less的公共方法” – 我总是在自定义Exception类上得到这个警告),但是在开发过程中看到更多/也许是所有的Pylint消息是有帮助的。 通过这种方式,您可以使用单行附注(请参阅下面的内容)查找要解决的问题,或者只是为下一位开发人员添加注释,以解释在此情况下为什么警告无误。
-
即使代码已经准备就绪,我仍然可以启用一些块样式的编译指示。我尝试使用其中的一小部分,但是如果对模块有意义,则可以将其作为文档来执行。 不过,我尽可能less地尝试,最好不要。
-
我使用单行评论风格来解决特别有效的错误。 例如,如果有一个地方,
except Exception as exc
,其实是有意义的,我把# pylint: disable=broad-except
在那一行,而不是一个更全局的方法,因为这是一个奇怪的exception,需要被调用基本上就是一种文档forms。
像Python中的所有其他东西一样,您可以在不同层次间接行事。 我的build议是思考什么属于什么水平,所以你最终不会对Pylint采取过于宽松的态度。
您也可以使用以下命令:
pylint --disable=C0321 test.py
我的pylint版本是0.25.1。
这是一个常见问题 :
4.1是否可以在本地禁用特定的消息?
是的,这个特性已经被添加到了Pylint 0.11中。 这可以通过添加来完成
“#pylint:disable = some-message,another-one”在所需的块级别或所需代码行的末尾。
您可以通过代码或符号名称来禁用消息。 请参阅文档 (或在terminal中运行pylint --list-msgs
)以获取pylint消息的完整列表。
该文档还提供了一个如何使用此function的很好的例子 。
如果这有助于某人,如果您使用Visual Studio代码,它期望该文件使用UTF8编码。 为了生成文件,我运行了pylint --generate-rcfile | out-file -encoding utf8 .pylintrc
pylint --generate-rcfile | out-file -encoding utf8 .pylintrc
PowerShell中的pylint --generate-rcfile | out-file -encoding utf8 .pylintrc
。