禁用文件中的所有Pylint警告

141

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

我们的代码库中有一个Python包含有一些临时的代码,我想临时禁用一个模块的所有警告,以便停止向其他开发人员展示这些多余的信息。是否有一种简单的方法可以pylint:disable一个模块的所有警告?

6个回答

196

以下内容来自 Pylint FAQ

在 Pylint < 0.25 版本中,请添加以下代码:

# pylint: disable-all

在模块的开头。

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

# pylint: skip-file

(但第一个版本将保留以保持向后兼容性。)

为了方便查找被忽略的模块,会发出一个信息级别为I0013的消息。如果您使用旧语法,最近的Pylint版本会额外发出一个I0014消息。


3
注意:这将禁用所有警告和所有错误。如果你想找到一种仅禁用警告的方法,请参阅此页面上的我的答案。 - eatcrayons

56
Pylint有五种信息类别(据我所知)。
这些类别过去非常明显,但现在用名称取代了编号的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”警告消息(技术上是一个“约定”警告,但我会讲到这点)。
在我的情况下,我有一个很久以前写的库。它工作得很好,所以真的没有必要担心现代Python惯例等等。我真正关心的只是可能破坏我的代码的错误。
我的解决方案是仅为此文件禁用所有“Warning”,“Convention”和“Refactoring”消息,方法是在第一行放置以下Pylint命令:
# pylint: disable=W,C,R

除了上述的关于尾随换行符的消息外,这正好满足了我的需求。


# pylint: disable=W,C,R,是在代码行末尾使用的一个好方法。 - mikey

31

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

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

1
我的用例是运行pylint *.py以处理目录中的所有文件,除了我想要跳过一个特定的文件。
添加# pylint: skip-file会导致Pylint失败,并显示I:8, 0:Ignoring entire file(file-ignored)。添加# pylint: disable=file-ignored不能解决这个问题。可能是一个全局错误而不是文件特定的错误。
解决方案是在Pylint命令选项中包含--disable=file-ignored。花费了太长时间才找到这个解决方案;当您明确忽略一个文件时,就不应该出现file-ignored错误。

3
更理想的做法是将其放置在 pylintrc 配置文件中,而不是作为命令选项。 - Asclepius

0

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

我在所有我的测试文件下方添加了以下导入内容,它似乎可以工作。如果有人知道为整个测试目录执行此操作的解决方案,那可能更好,但如果我可以避免它,我不想忽略整个repo。

    # 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 

使用两次没有出现任何问题,我进行了确认。最初我尝试使用括号来禁用两行,但不起作用。我不需要逗号,所以把它们删除了。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接