如何禁用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=C0321configuration文件中添加disable=C0321 ,但Pylint坚持要报告它。 该行的变化(如disable=0321disable=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决定。

多种方法

  1. 在一个或多个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 
  1. 进一步禁用pylint命令行,如Aboo和Cairnarvon所述。 这看起来像pylint --disable=bad-builtin 。 重复 – 禁止其他项目。

  2. 进一步禁用单个Python代码行,如Imolit所述。 这些看起来像some statement # pylint: disable=broad-except (对原始源代码行的末尾的额外注释), 只适用于当前行 。 我的方法是始终把这些放在其他代码行的末尾,这样它们就不会与块的风格混淆,见下文。

  3. 进一步禁用为较大的Python代码块定义,直到完成源文件。

    • 这些看起来像# pragma pylint: disable=bad-whitespace (注意pragma关键字)。

    • 这些适用于编译之后每一行 。 把这些文件放在文件的顶部使压抑适用于整个文件。 将相同的块放在文件中使它们只适用于块后面的行。 我的方法是始终把它们放在自己的路线上,这样就不会混淆单线式的风格。

    • 当一个抑制只适用于一段代码时,使用# pragma pylint: enable=bad-whitespace (现在使用enable not disable )来停止抑制。

请注意,对于单行禁用使用# 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