【问题标题】:Is it possible to ignore one single specific line with Pylint?是否可以使用 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

【问题讨论】:

    标签: python pylint


    【解决方案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 而不是==。请参阅 flake8spycodestyles 错误代码。 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
    猜你喜欢
    • 2019-06-21
    • 2015-06-30
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2016-12-28
    • 1970-01-01
    相关资源
    最近更新 更多