Что означает «# noqa» в комментариях к Python?

163

При поиске в проекте Python я нашел несколько строк с комментариями # noqa.

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

Что noqaзначит в Python? Это специфично только для Python?

Ishpreet
источник
3
noqaскорее всего означает no quality assurance. Это говорит программному обеспечению анализа кода, чтобы игнорировать предупреждения.
Стевойсяк
В моей голове это всегда звучит как «без вопросов»
thrau

Ответы:

199

Добавление # noqaв строку означает, что линтер (программа, которая автоматически проверяет качество кода) не должен проверять эту строку. Любые предупреждения, которые мог сгенерировать код, будут игнорироваться.

Эта строка может иметь что-то, что «выглядит плохо» для линтера, но разработчик понимает и намеревается сделать это по какой-то причине.

Для получения дополнительной информации см. Документацию Flake8 по выбору и игнорированию нарушений .

jimf
источник
3
для линтеров python обычно это утверждение, но для других линтеров оно может быть другим, то есть javascript w / jshint: // jshint ignore:line( jshint.com/docs )
jimf
7
Это работает и в PyCharm. Краткая форма универсальная # noqa. Или конкретная форма, # noinspection PyUnresolvedReferencesнапример.
Боб Стейн
Как насчет # noqa F0001?
youkaichao
5
Обратите внимание, что для pycodestyle / pep8 # nopep8также можно использовать, что немного яснее, imo.
OozeMeister
54

noqa = NO-QA (NO Quality Assurance)

Обычно это программируется в Python, чтобы игнорировать предупреждения PEP8 .

Проще говоря, строки с #noqa в конце будут игнорироваться программами linter и не будут выдавать никаких предупреждений.

Вишваджит Патхак
источник
15

Знаешь что? Даже Гвидо ван Россум (создатель Python) задавал этот вопрос раньше : D

Немного Этимология из# noqa :

Раньше это был «nopep8», но когда Flake8 и Pep8 хотели получить общий квалификатор, @florentx предложил «NoQA», как в «No Quality Assurance» (iirc), и он застрял.

Некоторые основные обычаи из# noqaflake8 ):

  • # flake8: noqa: файлы , содержащие эту строку , пропускаются
  • строки , содержащие # noqaкомментарий в конце : не будут выдавать предупреждения
  • # noqa: <error>например, # noqa: E234 в конце : игнорировать конкретные ошибки в строке
    • можно указать несколько кодов ошибок через запятую
    • двоеточие перед списком кодов требуется
YaOzI
источник