What does '# noqa' mean in Python comments?

Viewed 108056

While searching through a Python project, I found a few lines commented with # noqa.

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

What does noqa mean in Python? Is it specific to Python only?

4 Answers

noqa = NO-QA (NO Quality Assurance)

It's generally used in Python code to ignore PEP8 warnings.

Lines with #noqa at the end will be ignored by linter programs and won't raise any warnings.

You know what? Even Guido van Rossum (the creator of Python) asked this question before :D

A bit Etymology of # noqa:

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: files that contain this line are skipped
  • lines that contain a # noqa comment at the end: will not issue warnings
  • # noqa: <error>, e.g., # noqa: E234 at the end: ignore specific errors on a line
    • multiple error codes can be given, separated by comma
    • the colon before the list of codes is required

Came here after finding a # noqa directive in a library that I was working with. Having never heard of it, I naturally arrived here after searching on Google. The answers provided here are adequate but I wanted to provide some further elaboration for those that may be curious (I certainly was)

  • # noqa has evolved from the # nopep8 syntax used in previous releases of flake8

  • # noqa is supported by IDEs, like PyCharm, for use with their built-in code inspection tools.

  • # noqa can be used as a pre-commit directive, such that prior to new commits an inspection process must complete

  • # noqa can be used to ignore all warnings or given specific warnings to ignore. For example, # noqa: F401 will ignore an unused imported module warning.

As an example, consider the following code:

import os

print("Hello, world!")

This code imports the os module but doesn't use it. If one wanted to use the # noqa tool to suppress a PEP8 warning, it could be written as such:

import os  # noqa

print("Hello, world!")

This will ignore all warnings. However, if one were only to want to ignore a specific warning (PEP8 F401 imported but not used), it could be done as such:

import os  # noqa: F401

print("Hello, world!")

I've published an article with some noqa examples and more elaboration on the above points.

Related