是否可以使用 Pylint 忽略一个特定的行?

Posted

技术标签:

【中文标题】是否可以使用 Pylint 忽略一个特定的行?【英文标题】:Is it possible to ignore one single specific line with Pylint? 【发布时间】:2015-05-03 22:51:51 【问题描述】:

我的标题中有以下行:

import config.logging_settings

这实际上改变了我的 Python 日志记录设置,但 Pylint 认为这是一个未使用的导入。我一般不想删除unused-import 警告,所以可以忽略这一特定行吗?

我不介意为这个项目提供.pylintrc,因此将接受更改配置文件的答案。

否则,这样的事情也会受到赞赏:

import config.logging_settings # pylint: disable-this-line-in-some-way

【问题讨论】:

【参考方案1】:

Pylint 消息控制记录在the Pylint manual:

是否可以在本地禁用特定消息?

是的,此功能已在 Pylint 0.11 中添加。这可以通过添加来完成 # pylint: disable=some-message,another-one 在所需的块级别或所需代码行的末尾。

您可以使用消息代码或符号名称。

例如,

def test():
    # Disable all the no-member violations in this function
    # pylint: disable=no-member
    ...
global VAR # pylint: disable=global-statement

手册还有further examples。

a wiki 记录了所有 Pylint 消息及其代码。

【讨论】:

我喜欢flake8s # noqa。我不想在代码中看到这么多的 cmets。 # nolint 会更清楚。 @NilsLindemann 这样做的缺点是您会丢失有关您回避的消息的信息。您可能会不小心隐藏了一条您不希望显示的消息(可能是由于未来的版本更改或其他原因)。 @PierceDarragh 如果需要此精度,可以附加一个或多个错误代码或错误代码类别。例如,在def foo() :return 1 is 1 中,附加# noqa: E203 将不会报告: 之前的空格。附加 # noqa: E2 不会报告任何与空格相关的问题。但仍会报告使用is 而不是==。请参阅 flake8s 和 pycodestyles 错误代码。 More Infos.【参考方案2】:
import config.logging_settings # pylint: disable=W0611

这很简单,专门针对那条线。

您可以而且应该使用更易读的形式:

import config.logging_settings # pylint: disable=unused-import

【讨论】:

你从哪里得到消息显式符号?我的 linter(spyder 中的那个)没有报告它,并且在 jomo 的答案中链接的 wiki 也没有列出它。 你的意思是unused-import?我想当我使用 W0611 时我的 linter 给了我一个警告,但它已经超过 3 年了,所以我不记得了:/ 抱歉【参考方案3】:

除了接受的答案:

您可以添加pylint: enable:SPECIFIC_ERROR重新启用错误检查

例如,我的代码中有这个:

import time
import datetime
import os
import sys
# pylint: disable=import-error
import serial
# pylint: enable=import-error

这样您就可以忽略一行中的单个错误,而不必禁用检查整个文件中的错误

【讨论】:

您知道是否有一种方法可以只禁用特定行而无需重新启用它? 这是我找到的最简单的方法。您可以在 .pylintrc 文件中全局完全禁用错误【参考方案4】:

我相信您正在寻找...

import config.logging_settings  # @UnusedImport

注意注释前的双空格,以避免遇到其他格式警告。

此外,根据您的 IDE(如果您正在使用),可能有一个选项可以添加正确的忽略规则(例如,在 Eclipse 中,按 Ctrl + 1 ,当光标在警告上时,会自动提示@UnusedImport)。

【讨论】:

这可能适用于某些 IDE,但不适用于 emacs/flycheck。谢谢。请保留答案,因为它可能对其他人有所帮助。 这在命令行运行pylintflake8 时不起作用。 @JacobTomlinson 很有趣,谢谢。这是 Pydev 接受的,我的印象是 pyclipse 只是简单地向 pylint 出卖。必须稍微定制,或者 eclipse 正在处理这些指令并抑制输出。【参考方案5】:

签出https://github.com/PyCQA/pylint/tree/master/pylint/checkers 中的文件。我还没有找到比 Ctrl + F-ing 这些文件或使用 GitHub 搜索功能更好的方法来从消息中获取错误名称:

如果消息是“No name ... in module ...”,请使用搜索:

No name %r in module %r repo:PyCQA/pylint/tree/master path:/pylint/checkers

或者,获得更少的结果:

"No name %r in module %r" repo:PyCQA/pylint/tree/master path:/pylint/checkers

GitHub 会告诉你:

"E0611": (
    "No name %r in module %r",
    "no-name-in-module",
    "Used when a name cannot be found in a module.",

你可以这样做:

from collections import Sequence # pylint: disable=no-name-in-module

【讨论】:

你可以在docs找到它们 谢谢,这比通过源代码要好得多。我为 pylint doc 找到了另外两个镜子。显然,readthedoc 是官方镜像。另一个是pylint.org

以上是关于是否可以使用 Pylint 忽略一个特定的行?的主要内容,如果未能解决你的问题,请参考以下文章

解决忽略VScode中Python插件pylint报错的问题

Python - 使用Pylint检查分析代码

如何在SQL Server中选择特定日期的行,忽略时间。

熊猫只删除连续重复的行,忽略特定的列

Ubuntu18.04 系统环境下 vscode中忽略pylint某些错误或警告

是否可以使用 Visual Studio Code 的 linter 忽略特定警告?