114

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

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

4

5 回答 5

158

来自Pylint 常见问题解答

当 Pylint < 0.25 时,添加

# pylint: disable-all

在模块的开头。

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

# pylint: skip-file

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

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

于 2012-04-20T00:02:39.643 回答
42

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

这些类别在过去非常明显,但编号的 Pylint 消息现在已被名称取代。例如,C0302现在too-many-lines. 但是“C”告诉我们这too-many-lines是一个公约信息。这是令人困惑的,因为约定消息经常只是显示为警告,因为许多系统(例如Syntastic)似乎将所有内容分类为警告或错误。但是,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 命令来禁用该文件的所有WarningConventionRefactoring消息:

# pylint: disable=W,C,R

除了上述用于尾随换行符的消息之外,这正是我所需要的。

于 2017-04-20T04:37:08.777 回答
24

是的,您可以# 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
于 2017-01-26T20:24:28.097 回答
7

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

于 2012-04-23T07:11:44.960 回答
0

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

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

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

于 2017-06-03T02:13:22.237 回答