【问题标题】:What does '# noqa' mean in Python comments?Python 注释中的“#noqa”是什么意思?
【发布时间】:2018-01-02 22:25:40
【问题描述】:

在搜索 Python 项目时,我发现有几行注释为 # noqa

import sys
sys.path.append(r'C:\dev')
import some_module   # noqa

noqa 在 Python 中是什么意思?它仅特定于 Python 吗?

【问题讨论】:

标签: python comments terminology code-analysis pep8


【解决方案1】:

在一行中添加# noqa 表示linter(一个自动检查代码质量的程序)不应该检查这一行。代码可能生成的任何警告都将被忽略。

该行可能有一些对 linter 来说“看起来很糟糕”的东西,但开发人员理解并打算出于某种原因将它存在。

有关详细信息,请参阅Flake8 documentation for Selecting and Ignoring Violations

【讨论】:

  • 对于 python linters,通常是这个语句,但对于其他 linter,它可能会有所不同,即带有 jshint 的 javascript 是:// jshint ignore:line (jshint.com/docs)
  • 它也适用于 PyCharm。短格式通用# noqa。或长格式特定 # noinspection PyUnresolvedReferences 例如。
  • 注意,对于pycodestyle/pep8 # nopep8也可以使用,这样更清楚一点,imo。
【解决方案2】:

noqa = NO-QA(无质量保证)

Python 编程中通常提到忽略PEP8 警告。

简而言之,linter 程序将忽略末尾带有#noqa 的行,并且它们不会引发任何警告。

【讨论】:

    【解决方案3】:

    你知道吗?甚至 Guido van Rossum(Python 的创造者)asked this question before :D

    A bit Etymology of # noqa:

    它曾经是“nopep8”,但当 Flake8 和 Pep8 想要一个共同的 qualifier @florentx 建议“NoQA”,如“没有质量保证” (iirc) 并且卡住了。

    Some basic usages of # noqa(与flake8):

    • # flake8: noqa: 文件包含这一行被跳过
    • 包含# noqa 注释在末尾​​em>:不会发出警告
    • # noqa: <error>,例如,# noqa: E234 在结尾:忽略一行上的特定错误
      • 可以给出多个错误码,以逗号分隔
      • 代码列表前的冒号是必需的

    【讨论】:

    • 这绝对是最好的答案!学术的、历史的、实用的、简单的。
    • @d34n5 这绝对是最好的评论!全面的、抒情的、单词的、简单的。
    【解决方案4】:

    在我正在使用的库中找到 #noqa 指令后来到这里。没听说过,谷歌一搜自然就到了。这里提供的答案已经足够了,但我想为那些可能好奇的人提供一些进一步的阐述(我当然是)

    • # noqa 是从之前使用的 # nopep8 语法演变而来的 flake8 的发布

    • # noqa 受 IDE 支持,例如 PyCharm,可与它们的 内置代码检查工具。

    • # noqa 可以用作 pre-commit 指令,这样在 new 提交检查过程必须完成

    • # noqa 可用于忽略所有警告或给出特定警告 忽略。例如,# noqa: F401 将忽略未使用的 导入模块警告。

    例如,考虑以下代码:

    import os
    
    print("Hello, world!")
    

    这段代码导入了os 模块,但没有使用它。如果想使用# noqa 工具来抑制 PEP8 警告,可以这样写:

    import os  # noqa
    
    print("Hello, world!")
    

    这将忽略所有警告。但是,如果只想忽略特定警告(PEP8 F401 已导入但未使用),则可以这样做:

    import os  # noqa: F401
    
    print("Hello, world!")
    

    我已经发表了一篇文章,其中包含一些noqa examples 以及对上述几点的详细说明。

    【讨论】:

      猜你喜欢
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 2018-04-26
      • 2012-06-21
      • 2021-05-04
      • 2015-03-16
      相关资源
      最近更新 更多