如何禁用Pylint警告?

Hea*_*eek 232 python pylint

我试图禁用警告C0321("在单行上多个语句" - 我经常if在同一行上放置短单行结果的语句),在Pylint 0.21.1中(如果重要的话:到0.20. 1,常见的0.50.3,Python 2.6.6(r266:84292,2010年9月15日,16:22:56)).

我已经尝试添加disable=C0321Pylint配置文件,但Pylint仍坚持报告它.该行的变化(如disable=0321disable=C321)被标记为错误,因此Pylint 确实正确识别该选项,它只是忽略它.

这是一个Pylint错误,还是我做错了什么?有没有办法解决?我真的想摆脱一些噪音.

Rem*_*emi 153

我使用Eclipse遇到了这个问题并解决了如下问题:

在pylint文件夹中(例如C:\Python26\Lib\site-packages\pylint),按住Shift键,右键单击并选择在该文件夹中打开windows命令.类型:

lint.py --generate-rcfile > standard.rc
Run Code Online (Sandbox Code Playgroud)

这将创建standard.rc配置文件.在记事本中打开它[MESSAGES CONTROL],取消注释 disable=并添加要禁用的消息ID,例如:

disable=W0511, C0321
Run Code Online (Sandbox Code Playgroud)

保存文件,在Eclipse-> window-> preferences-> PyDev-> pylint中,在参数框中键入:

--rcfile=C:\Python26\Lib\site-packages\pylint\standard.rc
Run Code Online (Sandbox Code Playgroud)

现在它应该工作......


您还可以在代码顶部添加注释,该注释将由pylint解释:

# pylint: disable=C0321
Run Code Online (Sandbox Code Playgroud)

链接到所有pylint消息代码


添加例如--disable-ids=C0321在参数框中不起作用.所有可用的pylint消息都存储在字典中_messages,pylint.utils.MessagesHandlerMixIn该类是该类实例的属性.当使用参数运行pylint时--disable-ids=...(至少没有配置文件),此字典最初为空,在pylint中引发KeyError异常(pylint.utils.MessagesHandlerMixIn.check_message_id().在Eclipse中,您可以在Pylint 控制台中看到此错误消息(windows - show view - Console ,从控制台图标旁边的控制台选项中选择Pylint控制台.)

  • 不,它确实不应该。1)它引用了Eclipse,它与提出的问题无关。2)建议禁用旧消息代码。对于此问题的最简单解决方案,我建议[我的答案](http://stackoverflow.com/a/23542817/955014),或[克里斯·约翰逊的答案](http://stackoverflow.com/a/32672068/955014) ) 更多细节。 (2认同)

Chr*_*gan 144

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=
Run Code Online (Sandbox Code Playgroud)

所以看起来你~/.pylintrc应该disable=在一个部分内有行/ s [MESSAGES CONTROL].

  • @Head Geek:嗯,它适合我.`〜/ .pylintrc`有两行,`[MESSAGES CONTROL]`和`disable = C0321`.这会阻止该消息. (6认同)
  • 谢谢,但它已经在 [MESSAGES CONTROL] 部分中显示,如上所示。还是被忽视了。 (3认同)

imo*_*lit 138

从Pylint v.0.25.3开始,您可以使用符号名称来禁用警告,而不必记住所有这些代码.例如:

# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long
Run Code Online (Sandbox Code Playgroud)

这种风格比神秘的错误代码更有启发性,而且更实用,因为较新版本的Pylint只输出符号名称,而不是错误代码.

符号名称和代码之间的对应关系可以在这里找到.

可以在自己的行上插入禁用注释,将禁用应用于同一块中的所有内容.或者,它可以插入要应用的线的末端.

如果pylint输出" Locally disabling"消息,你可以通过locally-disabled 首先包括禁用来消除它们,如上例所示.

  • 但是把'#pylint:disable = foo` inlyne放在一起太长了,所以现在我需要添加`,line-too-long`!舌头在脸颊; 这就是我所需要的并解决了我的问题.谢谢! (16认同)
  • @omni 提供的链接已失效。您可以输入“pylint --list-msgs”来列出所有字符串 (3认同)

tha*_*kis 75

要在块中本地禁用警告,请添加

# pylint: disable=C0321
Run Code Online (Sandbox Code Playgroud)

那个街区.

  • 是.[imolit的答案](http://stackoverflow.com/a/23542817/832230)完全涵盖了这一点. (4认同)
  • 这是一项传统技术,不再推荐使用.看到其他答案. (3认同)
  • 您的意思是应该使用符号名称而不是代码编号,是吗? (2认同)
  • 如何找到符号名称?我的编辑器将吐出“ [pylint] C0111:缺少方法docstring`”,因此查找代码编号很容易,但是找到符号名称意味着我必须查找它。 (2认同)

Chr*_*son 74

有几种方法可以禁用Pylint的警告和错误.使用哪一个与您想要应用禁用的全局或本地方式有关 - 这是一个重要的设计决策.

多种方法

  1. 在一个或多个pylintrc文件中.

这涉及的不仅仅是~/.pylintrcChris Morgan描述的文件(在$ HOME目录中).Pylint将搜索rc文件,优先级更高的值"更近"文件:

  • 一个pylintrc在当前工作目录下的文件; 要么

  • 如果当前工作目录在Python模块中(即它包含一个__init__.py文件),则搜索Python模块的层次结构直到pylintrc找到文件; 要么

  • 由环境变量PYLINTRC命名的文件; 要么

  • 如果您的主目录不是/root:

    • ~/.pylintrc; 要么

    • ~/.config/pylintrc; 要么

    • /etc/pylintrc

请注意,大多数这些文件都是命名的pylintrc- 只有文件中~有一个前导点.

在您的pylintrc文件中添加行以禁用特定的pylint消息.例如:

[MESSAGES CONTROL]
disable=locally-disabled
Run Code Online (Sandbox Code Playgroud)
  1. 进一步禁用pylint命令行,如Aboo和Cairnarvon所述.这看起来像pylint --disable=bad-builtin.重复--disable以禁止其他项目.

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

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

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

    • 这些适用于 pragma 之后每一行.将这些块放在文件的顶部会使抑制应用于整个文件.将相同的块放在文件中较低的位置使它们仅适用于块后面的行.我的方法是始终把它们放在自己的行上,这样它们就不会与单行样式混淆,见上文.

    • 当抑制仅应用于代码范围内时,请使用# pragma pylint: enable=bad-whitespace(现在enable不使用disable)来停止抑制.

请注意,禁用单行使用# pylint语法,而禁用此行以前使用# pragma pylint语法.这些很容易混淆,特别是在复制和粘贴时.

把它放在一起

我通常使用这些方法的混合.

  • ~/.pylintrc用于绝对的全球标准 - 其中很少.

  • pylintrc当存在项目特定标准时,我在Python模块中的不同级别使用项目级别.特别是当您从其他人或团队接收代码时,您可能会发现他们使用您不喜欢的约定,但您不想重新编写代码.将设置保持在此级别有助于不将这些实践传播到其他项目.

  • 我在单个源文件的顶部使用块样式编译指示.我喜欢在开发的热度中关闭pragma(停止抑制消息),即使对于我不同意的Pylint标准(例如"太少的公共方法" - 我总是在自定义Exception类上得到警告) - 但是在开发过程中查看更多/可能所有Pylint消息会很有帮助.通过这种方式,您可以使用单行编译指示找到要解决的案例(请参阅下文),或者只是为下一个开发人员添加注释,以解释为什么在这种情况下警告是正常的.

  • 即使代码准备好检查,我也会启用一些块样式的pragma.我尝试使用其中的一些,但是当它对模块有意义时,可以将其作为文档.但是我试着尽可能少地离开,最好是没有.

  • 我使用单行注释样式来解决特别有效的错误.例如,如果有一个它实际上有意义的地方except Exception as exc,我把# pylint: disable=broad-except那条线放在那条线而不是更全局的方法,因为这是一个奇怪的例外,需要被调出,基本上作为一种文档形式.


与Python中的其他所有内容一样,您可以在不同的间接层中执行操作.我的建议是考虑属于什么级别的东西,这样你就不会对Pylint采取过于宽松的方法.

  • 在大多数情况下,我不提倡使用全局非空的 `~/.pylintrc`。恕我直言,配置通常应该与项目相关联,因此它必须在项目中的某个地方。只有这样,它才能进行版本控制并与项目共享。如果做不到这一点,克隆可能缺少 pylint 在不打印消息的情况下退出所需的自定义。 (2认同)
  • @ChrisJohnson前缀`pragma`似乎完全没有必要。例如,我在文件的顶部有“#pylint:disable = missing-docstring”,它适用于文件的其余部分。请检查并从答案中删除`pragma`前缀。 (2认同)
  • Pylint FAQ 没有写任何 pragma。(http://pylint.pycqa.org/en/latest/faq.html#is-there-a-way-to-disable-a-message-for-a-pspecial-module-only):您可以禁用或通过在文件顶部的注释中添加相应的选项,在模块级别启用(全局禁用)消息: # pylint:disable=wildcard-import, method-hidden # pylint:enable=too-many-lines (2认同)

小智 14

您还可以使用以下命令:

pylint --disable=C0321  test.py
Run Code Online (Sandbox Code Playgroud)

我的pylint版本是0.25.1.

  • 这现在是一种遗留技术。建议改用禁用警告的符号名称。请参阅此 [答案](/sf/answers/1647997221/)。 (2认同)

Che*_*tra 11

您只需要添加一行即可禁用要禁用的内容。

例如,

#pylint: disable = line-too-long, too-many-lines, no-name-in-module, import-error, multiple-imports, pointless-string-statement, wrong-import-order
Run Code Online (Sandbox Code Playgroud)

在模块的最开始添加它。


Eug*_*ash 9

这是一个FAQ:

4.1是否可以在本地禁用特定消息?

是的,此功能已添加到Pylint 0.11中.这可以通过
在所需的块级别或所需代码行的末尾添加"#pylint:disable = some-message,another-one" 来完成.

您可以通过代码或符号名称禁用消息.有关pylint消息的完整列表,请参阅docs(或pylint --list-msgs在终端中运行).
文档还提供了如何使用此功能的一个很好的示例.


Eli*_*gne 5

如果这对某人有帮助,如果您使用的是Visual Studio Code,它期望文件采用 UTF-8 编码。为了生成该文件,我pylint --generate-rcfile | out-file -encoding utf8 .pylintrcPowerShell中运行。