Python 评论中的“#noqa”是什么意思?
What does '# noqa' mean in Python comments?
在搜索 Python 项目时,我发现有几行注释为 # noqa
。
import sys
sys.path.append(r'C:\dev')
import some_module # noqa
noqa
在Python中是什么意思?它仅特定于 Python 吗?
在一行中添加# noqa
表示linter(一种自动检查代码质量的程序)不应该检查这一行。代码可能生成的任何警告都将被忽略。
该行可能 "looks bad" 对 linter 有影响,但开发人员出于某种原因理解并打算将其存在。
有关详细信息,请参阅 Flake8 documentation for Selecting and Ignoring Violations。
noqa = NO-QA(无质量保证)
它通常用于 Python 代码中以忽略 PEP8 警告。
最后带有 #noqa
的行将被 linter 程序忽略并且不会引发任何警告。
你知道吗?甚至 Guido van Rossum(Python 的创造者)asked this question before :D
It used to be "nopep8" but when Flake8 and Pep8 wanted a common qualifier @florentx suggested "NoQA" as in "No Quality Assurance" (iirc) and it stuck.
Some basic usages of # noqa
(with flake8):
# flake8: noqa
: 包含这一行的文件被跳过- 行包含
# noqa
评论末尾:不会发出警告 # noqa: <error>
,例如# noqa: E234
末尾:忽略一行中的特定错误- 可以给出多个错误码,用逗号分隔
- 代码列表前的冒号是必需的
在我正在使用的库中找到 #noqa 指令后来到这里。没听说过,自然是在Google上搜索到了这里。这里提供的答案是足够的,但我想为那些可能好奇的人提供一些进一步的阐述(我当然是)
的发布# 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 examples 和更多的阐述。