Reputation: 5880
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?
Upvotes: 438
Views: 211063
Reputation: 3711
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.
Upvotes: 161
Reputation: 365
In this example, noqa is ignored!
print('\njson_response =\n' + json.dumps(json_response, indent=4)) # noqa: T201
The output of running the command:
flake8 --toml-config=./pyproject.toml
includes:
.\test_request.py:83:5: T201 print found. print('\njson_response =\n' + json.dumps(json_response, indent=4)) ^
(and T201 is not mentioned in the pyproject.toml file)
Upvotes: 0
Reputation: 4450
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.
Upvotes: 34
Reputation: 17478
You know what? Even Guido van Rossum (the creator of 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
: files that contain this line are skipped# noqa
comment at the end: will not issue warnings# noqa: <error>
, e.g., # noqa: E234
at the end: ignore specific errors on a line
Upvotes: 134
Reputation: 5137
Adding # noqa
to a line indicates that the linter (a program that automatically checks code quality) should not check this line. Any warnings that code may have generated will be ignored.
That line may have something that "looks bad" to the linter, but the developer understands and intends it to be there for some reason.
For more information, see the Flake8 documentation for Selecting and Ignoring Violations.
Upvotes: 456