337

我正在尝试在 Pylint 0.21.1 中禁用警告 C0321(“单行上有多个语句”-我经常将if具有短单行结果的语句放在同一行)(如果重要的话:astng 0.20. 1、通用 0.50.3 和 Python 2.6.6(r266:84292,2010 年 9 月 15 日,16:22:56))。

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

这是一个 Pylint 错误,还是我做错了什么?有没有解决的办法?

我真的很想摆脱一些这种噪音。

4

13 回答 13

211

pylint --generate-rcfile shows it like this:

[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=

So it looks like your ~/.pylintrc should have the disable= line/s in it inside a section [MESSAGES CONTROL].

于 2010-12-03T02:00:52.600 回答
193

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

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

lint.py --generate-rcfile > standard.rc

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

disable=W0511, C0321

保存文件,然后在 Eclipse → WindowPreferencesPyDev → *pylint 中,在参数框中输入:

--rcfile=C:\Python26\Lib\site-packages\pylint\standard.rc

现在它应该工作...


您还可以在代码顶部添加将由 Pylint 解释的注释:

# pylint: disable=C0321

皮林特消息代码


在参数框中添加例如--disable-ids=C0321不起作用。

所有可用的 Pylint 消息都存储在字典中_messages,字典是类实例的属性pylint.utils.MessagesHandlerMixIn。当使用参数运行 Pylint 时--disable-ids=...(至少没有配置文件),这个字典最初是空的,在 Pylint ( pylint.utils.MessagesHandlerMixIn.check_message_id().

在 Eclipse 中,您可以在 Pylint 控制台中看到此错误消息(windows* →显示视图控制台,从控制台图标旁边的控制台选项中选择 Pylint 控制台。)

于 2011-07-16T19:25:41.513 回答
187

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

# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long

这种风格比神秘的错误代码更有指导意义,也更实用,因为新版本的 Pylint 只输出符号名称,而不是错误代码。

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

禁用注释可以插入到它自己的行中,将禁用应用于同一块中后面的所有内容。或者,它可以插入到要应用的行的末尾。

如果 Pylint 输出 " " 消息,您可以通过在上面的示例中首先Locally disabling包含禁用来摆脱它们。locally-disabled

于 2014-05-08T13:13:46.360 回答
96

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

# pylint: disable=C0321

到那个街区。

于 2013-12-26T18:28:22.043 回答
88

有几种方法可以禁用 Pylint 的警告和错误。使用哪一个与您希望在全球或本地应用禁用的方式有关——这是一个重要的设计决策。

多种方法

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

这不仅仅涉及~/.pylintrcChris Morgan 所描述的文件(在您的 $HOME 目录中)。Pylint 将搜索 rc 文件,优先考虑“更接近”的文件:

  • 当前工作目录中的一个pylintrc文件;或者

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

  • 由环境变量 PYLINTRC 命名的文件;或者

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

    • ~/.pylintrc; 或者

    • ~/.config/pylintrc; 或者

    • /etc/pylintrc

请注意,这些文件中的大多数都已命名pylintrc——只有 in 中的文件~有一个前导点。

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

[MESSAGES CONTROL]
disable=locally-disabled
  1. pylint如 Aboo 和 Cairnarvon 所述,从命令行进一步禁用。这看起来像pylint --disable=bad-builtin。重复--disable以抑制其他项目。

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

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

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

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

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

请注意,禁用单行使用该# pylint语法,而禁用该行以后使用该# pragma pylint语法。这些很容易混淆,尤其是在复制和粘贴时。

把它们放在一起

我通常混合使用这些方法。

  • 我使用~/.pylintrc绝对全球标准——其中很少。

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

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

  • 即使代码已准备好签入,我也会启用一些块样式的 pragma。我尝试使用其中的一些,但当它对模块有意义时,可以作为文档执行。但是我尽量少放,最好不要放。

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


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

于 2015-09-19T18:57:13.167 回答
30

这是一个常见问题解答

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

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

4.2 有没有办法只禁用特定模块的消息?

是的,您可以通过在文件顶部的注释中添加相应选项来在模块级别禁用或启用(全局禁用)消息:

# pylint: disable=wildcard-import, method-hidden
# pylint: enable=too-many-lines

您可以通过以下方式禁用消息:

  • 数字 ID:E1101E1102等。
  • 符号信息:no-member, undefined-variable, 等
  • 一组支票的名称。你可以用pylint --list-groups.
  • 检查类别:C, R, W, 等
  • 所有检查与all.

有关 Pylint 消息的完整列表,请参阅文档(或pylint --list-msgs在终端中运行)。该文档还提供了一个很好的示例来说明如何使用此功能。

于 2016-07-01T15:27:52.870 回答
25

您还可以使用以下命令:

pylint --disable=C0321  test.py

我的 Pylint 版本是 0.25.1。

于 2013-06-18T04:05:41.260 回答
13

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

例如,

#pylint: disable = line-too-long, too-many-lines, no-name-in-module, import-error, multiple-imports, pointless-string-statement, wrong-import-order

在模块的最开始添加它。

于 2019-06-22T17:40:16.453 回答
4

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

于 2017-07-18T22:11:45.817 回答
3

很抱歉与最初的问题有所不同,关于海报的一般偏好,全局配置文件会更好地解决这个问题。但是,就像在许多流行的答案中一样,我倾向于在我的代码中看到可能触发警告的内容,并最终通知贡献者
我对@imolit 的回答需要简短,这里有一些细节。

对于multiple-statements消息,最好在块或模块级别禁用它,就像这样

# pylint: disable=multiple-statements

我的用例现在attribute-defined-outside-init在 unittest setup() 中,我选择了行范围的消息禁用,使用消息代码来避免line-too-long问题。

class ParserTest(unittest.TestCase):
   def setUp(self):
       self.parser = create_parser()  # pylint: disable=W0201

可以使用以下命令在本地找到对应关系

$ pylint --list-msgs | grep 'outside-init'
:attribute-defined-outside-init (W0201): *Attribute %r defined outside __init__*

当然,您可以类似地从代码中检索符号名称。

于 2021-05-14T09:50:13.747 回答
2

根据Pylint文档,最简单的方法是使用此图表

  • C 约定相关的检查
  • R 重构相关检查
  • W 各种警告
  • E 错误,用于代码中可能的错误
  • F 致命,如果发生错误导致 Pylint 无法进行进一步处理。

所以可以使用:

pylint -j 0 --disable=I,E,R,W,C,F YOUR_FILES_LOC
于 2020-06-16T14:52:58.273 回答
1

Python 语法允许在一行中有多个语句,用分号 (;) 分隔。但是,将每一行限制为一个语句可以使人们在阅读程序时更容易遵循程序的逻辑。

因此,解决此问题的另一种方法是了解为什么存在 lint 消息并且不在一行中放置多个语句。

是的,您可能会发现每行编写多个语句更容易,但是,Pylint 不仅适用于您的代码的所有其他读者。

于 2018-02-13T11:09:21.627 回答
-3

编辑“C:\Users\Your User\AppData\Roaming\Code\User\settings.json”并在末尾添加“python.linting.pylintArgs”及其行,如下所示:

{
    "team.showWelcomeMessage": false,
    "python.dataScience.sendSelectionToInteractiveWindow": true,
    "git.enableSmartCommit": true,
    "powershell.codeFormatting.useCorrectCasing": true,
    "files.autoSave": "onWindowChange",
    "python.linting.pylintArgs": [
        "--load-plugins=pylint_django",
        "--errors-only"
    ],
}
于 2019-11-02T17:21:28.433 回答