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

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

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


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

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

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

没有质量保证

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

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

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

# noqa的词源:

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

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

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

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

# noqa是从以前使用的# nopep8语法演变而来的 释放flake8 # noqa是由ide支持的,如PyCharm,用于他们的 内置代码检查工具。 # noqa可以作为一个预提交指令使用,比如在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的例子,并对上述观点进行了更详细的阐述。