【发布时间】:2025-11-30 09:45:01
【问题描述】:
我们在构建系统中使用 Pylint。
我们的代码库中有一个包含一次性代码的 Python 包,我想暂时禁用一个模块的所有警告,这样我就可以停止用这些多余的消息来干扰其他开发人员。有没有一种简单的方法来pylint: disable 模块的所有警告?
【问题讨论】:
我们在构建系统中使用 Pylint。
我们的代码库中有一个包含一次性代码的 Python 包,我想暂时禁用一个模块的所有警告,这样我就可以停止用这些多余的消息来干扰其他开发人员。有没有一种简单的方法来pylint: disable 模块的所有警告?
【问题讨论】:
来自Pylint FAQ:
使用 Pylint
# pylint: disable-all
在模块的开头。
Pylint 0.26.1 及更高版本已将该指令重命名为
# pylint: skip-file
(但为了向后兼容,将保留第一个版本)。
为了便于查找哪些模块被忽略,发出了信息级别的消息 I0013。对于最新版本的 Pylint,如果您使用旧语法,则会发出额外的 I0014 消息。
【讨论】:
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,好用在一行的末尾
是的,您可以在文件中指定# 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 中。
另一个选项是使用--ignore 命令行选项跳过对某些文件的分析。
【讨论】:
我的用例是运行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 配置文件中,而不是在命令选项中。
我只是为按类组织的 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 的装饰器,请告诉我。
【讨论】: