什么是' #noqa'在Python评论意味着什么?

时间:2017-07-27 09:25:10

标签: python terminology code-analysis

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

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

noqa在Python中意味着什么?它仅适用于Python吗?

4 个答案:

答案 0 :(得分:89)

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

这条线可能有一些"看起来很糟糕"对于linter,但开发人员理解并打算出于某种原因将其存在。

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

答案 1 :(得分:20)

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

Python编程通常会引用它来忽略PEP8警告。

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

答案 2 :(得分:1)

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

  • # noqa是从先前使用的#nopep8语法演变而来的 flake8版本

  • # noqa受IDE(例如PyCharm)支持,并与其结合使用 内置的代码检查工具。

  • # noqa可以用作预提交指令,例如 提交检查过程必须完成

  • # 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,并详细说明了上述几点。

答案 3 :(得分:0)

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

A bit Etymology of # noqa

  

它曾经是“ nopep8”,但是当Flake8和Pep8想要一个共同点时   限定词@florentx建议使用“无质量保证”中的“ NoQA”   (iirc)并卡住了。

Some basic usages of # noqa(带有flake8):

  • SELECT * FROM Registrations R INNER JOIN Programs P ON R.ProgramID = P.ProgramID LEFT OUTER JOIN Customers C ON R.CustomerID = C.CustomerID :包含这一行文件被跳过
  • 末尾包含 id| name | level | boss_id | --|----------|--------|----------| 1 | User A | 1 | 5 | 2 | User B | 1 | 5 | 3 | User C | 1 | 6 | 4 | User D | 1 | 6 | 5 | Leader A | 2 | 7 | 6 | Leader B | 2 | 7 | 7 | Boss A | 3 | 0 | 注释 的行:不会发出警告
  • User A User B User C User D ,例如,# flake8: noqa :忽略一行中的特定错误
    • 可以给出多个错误代码,以逗号分隔
    • 代码列表之前的冒号
相关问题