是否可以使用 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
。谢谢。请保留答案,因为它可能对其他人有所帮助。
这在命令行运行pylint
或flake8
时不起作用。
@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报错的问题