# noqa'在Python注释中意味着什么?

在搜索一个Python项目时,我发现了几行用# noqa注释的行。

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

noqa在Python中是什么意思?它只针对Python吗?

117535 次浏览

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

对于linter来说,这一行可能有一些“看起来很糟糕”的东西,但开发人员理解并希望它出于某种原因出现在那里。

有关更多信息,请参见Flake8选择和忽略违规的文档

没有质量保证

它通常在Python代码中用于忽略PEP8警告。

末尾带有#noqa的行将被linter程序忽略,并且不会引发任何警告。

你知道吗?甚至Guido van Rossum (Python的创造者)之前问过这个问题:D

# noqa的位词源:

它曾经是“nopep8”,但当Flake8和Pep8想要一个共同的 @florentx建议使用“NoQA”,即“没有质量保证”

. (iirc)和它卡住了

# noqa的一些基本用法(带有flake8):

  • # flake8: noqa:包含这条线文件被跳过
  • 包含# noqa注释的:将不会发出警告
  • # noqa: <error>,例如,# noqa: E234 在最后:忽略一行中的具体的错误
    • 可以给出多个错误代码,以逗号分隔
    • 代码列表前的冒号是必需的
    • 李< / ul > < / >

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

  • # noqa由前面使用的# nopep8语法演变而来 释放flake8

  • # noqa被ide支持,如PyCharm,用于他们的 内置代码检查工具

  • # noqa可以用作一个预提交指令,这样在new . bb1之前 提交一个检查过程必须完成

  • # 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例子的文章,并对以上几点进行了更详细的阐述。