【问题标题】:Disable all Pylint warnings for a file禁用文件的所有 Pylint 警告
【发布时间】:2025-11-30 09:45:01
【问题描述】:

我们在构建系统中使用 Pylint。

我们的代码库中有一个包含一次性代码的 Python 包,我想暂时禁用一个模块的所有警告,这样我就可以停止用这些多余的消息来干扰其他开发人员。有没有一种简单的方法来pylint: disable 模块的所有警告?

【问题讨论】:

    标签: python pylint


    【解决方案1】:

    来自Pylint FAQ

    使用 Pylint

    # pylint: disable-all
    

    在模块的开头。

    Pylint 0.26.1 及更高版本已将该指令重命名为

    # pylint: skip-file
    

    (但为了向后兼容,将保留第一个版本)。

    为了便于查找哪些模块被忽略,发出了信息级别的消息 I0013。对于最新版本的 Pylint,如果您使用旧语法,则会发出额外的 I0014 消息。

    【讨论】:

    • 注意:这将禁用所有警告和所有错误。如果您正在寻找一种方法来禁用 only 警告,请参阅我在此页面上的回答。
    【解决方案2】:

    Pylint 有 five "categories" for messages(我知道)。

    这些类别在过去非常明显,但编号的 Pylint 消息现在已被名称取代。例如,C0302 现在是 too-many-lines。但是“C”告诉我们too-many-lines 是一个Convention 消息。这很令人困惑,因为 Convention 消息经常只是显示为警告,因为许多系统(例如Syntastic)似乎将所有内容归类为警告或错误。但是,Pylint 报告仍将事物分为这些类别,因此它仍然绝对受到支持。

    您的问题专门针对 Warnings,所有 Pylint Warning 消息名称都以“W”开头。

    这对我来说有点困难,但this answer 最终让我找到了答案。 Pylint 仍然支持禁用整个消息类别。因此,要禁用所有 警告,您可以:

    disable=W
    

    这可以在命令行中使用:

    $ pylint --disable=W myfile.py
    

    或者,你可以把它放在你的 pylintrc 文件中:

    [MESSAGES CONTROL]
    disable=W
    

    注意:您的 rc 文件中可能已经有 disable 选项,在这种情况下,您应该将“W”附加到此列表中。

    或者,您可以将它内联到您的代码中,它适用于它所在的范围:

    # pylint: disable=W
    

    要为整个文件禁用它,最好将它放在文件的最顶部。然而,即使在文件的最顶部,我发现我仍然收到 trailing-newlines 警告消息(技术上是 convention 警告,但我正在处理)。

    就我而言,我有一个很久以前有人写的库。它运行良好,因此真的不需要担心现代 Python 约定等。我真正关心的是可能会破坏我的代码的错误。

    我的解决方案是仅通过将以下 Pylint 命令置于第一行:

    # pylint: disable=W,C,R
    

    除了前面提到的用于尾随换行符的消息之外,这正是我所需要的。

    【讨论】:

    • # pylint: disable=W,C,R,好用在一行的末尾
    【解决方案3】:

    是的,您可以在文件中指定# pylint: skip-file,但禁用文件的所有警告是不好的做法。

    如果您只想禁用特定警告,可以通过添加注释(例如 # 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 中。
    【解决方案4】:

    另一个选项是使用--ignore 命令行选项跳过对某些文件的分析。

    【讨论】:

      【解决方案5】:

      我的用例是运行pylint *.py 来处理目录中的所有文件,除了我想跳过一个特定文件。

      添加 # pylint: skip-file 导致 Pylint 以 I: 8, 0: Ignoring entire file (file-ignored) 失败。添加# pylint: disable=file-ignored 并不能解决这个问题。据推测,这是一个全局错误,而不是特定于文件的错误。

      解决方案是在 Pylint 命令选项中包含 --disable=file-ignored。解决这个问题的时间太长了。明确忽略文件时不应出现file-ignored 错误。

      【讨论】:

      • 更理想的是,将其放在pylintrc 配置文件中,而不是在命令选项中。
      【解决方案6】:

      我只是为按类组织的 pytest 测试做了这个,它可能对某人有用。这些会引发很多错误,但是当我在 cli 中运行时,我喜欢基于类的结构。

      我在我所有的测试文件的导入下面添加了这个,它似乎工作。如果有人知道解决方案,对测试目录执行一次可能会更好,但如果可以避免,我不想忽略整个仓库

          # Disable pylint errors for tests organised into classes
          # pylint: disable=no-self-use too-few-public-methods
          # Disable pylint errors for pytest fixtures
          # pylint: disable=unused-argument invalid-name 
      

      使用它两次并没有破坏任何东西,我检查以确保。最初我尝试用括号禁用 2 行,但没有奏效。我不需要逗号,所以删除它们。

      如果有人知道可以将组织测试类标记为等同于@dataclass 的装饰器,请告诉我。

      【讨论】:

        最近更新 更多