"#noqa"在Python评论中意味着什么?

Ish*_*eet 107 python comments code-analysis terminology pep8

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

import sys
sys.path.append(r'C:\dev')
import some_module   # noqa
Run Code Online (Sandbox Code Playgroud)

noqaPython的意思是什么?它只针对Python吗?

jim*_*imf 139

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

那条线可能有一些"看起来很糟糕"的东西,但开发商理解并打算出于某种原因它在那里.

有关更多信息,请参阅Flake8文档以了解选择和忽略违规.

  • 它也适用于PyCharm.简短形式通用`#noqa`.或者长形式特定的`#noinspection PyUnresolvedReferences`例如. (6认同)
  • 注意,对于pycodestyle / pep8,也可以使用#nopep8,它更加清晰了。 (4认同)
  • 对于python linters,通常是这个语句,但对于其他短语,它可以是不同的,即javascript w/jshint是:`// jshint ignore:line`(http://jshint.com/docs/) (3认同)

YaO*_*OzI 46

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

有点词源的# noqa:

它曾经是“nopep8”,但是当 Flake8 和 Pep8 想要一个共同的限定符时,@florentx 在“No Quality Assurance”(iirc)中建议使用“NoQA”并且它卡住了。

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

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

  • @d34n5 这绝对是最好的评论!全面、抒情、单词、简单。 (8认同)
  • 这绝对是最好的答案!学术性、历史性、实用性、简单性。 (2认同)

Vis*_*hak 38

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

它在Python Programming中通常被称为忽略PEP8警告.

简单来说,linter程序会忽略末尾有#noqa的行,它们不会引发任何警告.


the*_*est 7

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

  • # noqa已经从# nopep8之前的 flake8 版本中使用的语法演变而来

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

  • # noqa 可以用作预提交指令,以便在新提交之前必须完成检查过程

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

例如,请考虑以下代码:

import os

print("Hello, world!")
Run Code Online (Sandbox Code Playgroud)

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

import os  # noqa

print("Hello, world!")
Run Code Online (Sandbox Code Playgroud)

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

import os  # noqa: F401

print("Hello, world!")
Run Code Online (Sandbox Code Playgroud)

我发表了一篇文章,其中包含一些noqa 示例以及对上述要点的更多阐述。