Disable all Pylint warnings for a file

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

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

102248 次浏览

来自 Pylint FAQ:

当 Pylint < 0.25时,添加

# pylint: disable-all

在模块的开始。

Pylint 0.26.1及以上版本已将该指令重命名为

# pylint: skip-file

(但是第一个版本将保留向下兼容)。

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

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

是的,您可以在文件中指定 # 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

Pylint 有 信息的五个“类别”(我知道)。

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

您的问题明确指向 警告,并且所有 Pylint警告消息名称都以“ W”开头。

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

disable=W

这可以在命令行中使用:

$ pylint --disable=W myfile.py

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

[MESSAGES CONTROL]
disable=W

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

或者,您可以将它内联到您的代码中,在那里它将为放置它的作用域工作:

# pylint: disable=W

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

就我而言,我有一个很久以前某人写的图书馆。它工作得很好,所以实际上没有必要担心现代的 Python 约定等等。我真正关心的是那些可能会破坏我代码的错误。

我的解决方案是仅通过在第一行放置以下 Pylint 命令来禁用这个文件的所有 警告公约重构消息:

# pylint: disable=W,C,R

除了前面提到的拖尾换行,这正是我所需要的。

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

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

解决方案是在 Pylint 命令选项中包含 --disable=file-ignored。解决这个问题花了很长时间; 当您显式忽略一个文件时,不应该出现 file-ignored错误。

我这样做只是为了测试组织到课堂上,它可能有用的人。这些错误造成了很多错误,但是当我在 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 的组织测试类,请让我知道。