Flake8 and its plugins assign a code to each message that we refer to as an error code
(or violation
). Most plugins will list their error codes in their documentation or README.
Flake8 installs pycodestyle
, pyflakes
, and mccabe
by default and generates its own error code
s for pyflakes
:
+------+---------------------------------------------------------------------+ | Code | Example Message | +======+=====================================================================+ | F401 | module
imported but unused | +------+---------------------------------------------------------------------+ | F402 | import module
from line N
shadowed by loop variable | +------+---------------------------------------------------------------------+ | F403 | 'from module
import *' used; unable to detect undefined names | +------+---------------------------------------------------------------------+ | F404 | future import(s) name
after other statements | +------+---------------------------------------------------------------------+ | F405 | name
may be undefined, or defined from star imports: module
| +------+---------------------------------------------------------------------+ | F406 | 'from module
import *' only allowed at module level | +------+---------------------------------------------------------------------+ | F407 | an undefined __future__
feature name was imported | +------+---------------------------------------------------------------------+ +------+---------------------------------------------------------------------+ | F501 | invalid %
format literal | +------+---------------------------------------------------------------------+ | F502 | %
format expected mapping but got sequence | +------+---------------------------------------------------------------------+ | F503 | %
format expected sequence but got mapping | +------+---------------------------------------------------------------------+ | F504 | %
format unused named arguments | +------+---------------------------------------------------------------------+ | F505 | %
format missing named arguments | +------+---------------------------------------------------------------------+ | F506 | %
format mixed positional and named arguments | +------+---------------------------------------------------------------------+ | F507 | %
format mismatch of placeholder and argument count | +------+---------------------------------------------------------------------+ | F508 | %
format with *
specifier requires a sequence | +------+---------------------------------------------------------------------+ | F509 | %
format with unsupported format character | +------+---------------------------------------------------------------------+ | F521 | .format(...)
invalid format string | +------+---------------------------------------------------------------------+ | F522 | .format(...)
unused named arguments | +------+---------------------------------------------------------------------+ | F523 | .format(...)
unused positional arguments | +------+---------------------------------------------------------------------+ | F524 | .format(...)
missing argument | +------+---------------------------------------------------------------------+ | F525 | .format(...)
mixing automatic and manual numbering | +------+---------------------------------------------------------------------+ | F541 | f-string without any placeholders | +------+---------------------------------------------------------------------+ +------+---------------------------------------------------------------------+ | F601 | dictionary key name
repeated with different values | +------+---------------------------------------------------------------------+ | F602 | dictionary key variable name
repeated with different values | +------+---------------------------------------------------------------------+ | F621 | too many expressions in an assignment with star-unpacking | +------+---------------------------------------------------------------------+ | F622 | two or more starred expressions in an assignment (a, *b, *c = d)
| +------+---------------------------------------------------------------------+ | F631 | assertion test is a tuple, which is always True
| +------+---------------------------------------------------------------------+ | F632 | use ==/!=
to compare str
, bytes
, and int
literals | +------+---------------------------------------------------------------------+ | F633 | use of >>
is invalid with print
function | +------+---------------------------------------------------------------------+ | F634 | if test is a tuple, which is always True
| +------+---------------------------------------------------------------------+ +------+---------------------------------------------------------------------+ | F701 | a break
statement outside of a while
or for
loop | +------+---------------------------------------------------------------------+ | F702 | a continue
statement outside of a while
or for
loop | +------+---------------------------------------------------------------------+ | F703 | a continue
statement in a finally
block in a loop | +------+---------------------------------------------------------------------+ | F704 | a yield
or yield from
statement outside of a function | +------+---------------------------------------------------------------------+ | F706 | a return
statement outside of a function/method | +------+---------------------------------------------------------------------+ | F707 | an except:
block as not the last exception handler | +------+---------------------------------------------------------------------+ | F721 | syntax error in doctest | +------+---------------------------------------------------------------------+ | F722 | syntax error in forward annotation | +------+---------------------------------------------------------------------+ | F723 | syntax error in type comment | +------+---------------------------------------------------------------------+ +------+---------------------------------------------------------------------+ | F811 | redefinition of unused name
from line N
| +------+---------------------------------------------------------------------+ | F821 | undefined name name
| +------+---------------------------------------------------------------------+ | F822 | undefined name name
in __all__
| +------+---------------------------------------------------------------------+ | F823 | local variable name
... referenced before assignment | +------+---------------------------------------------------------------------+ | F831 | duplicate argument name
in function definition | +------+---------------------------------------------------------------------+ | F841 | local variable name
is assigned to but never used | +------+---------------------------------------------------------------------+ +------+---------------------------------------------------------------------+ | F901 | raise NotImplemented
should be raise NotImplementedError
| +------+---------------------------------------------------------------------+
We also report one extra error: E999
. We report E999
when we fail to compile a file into an Abstract Syntax Tree for the plugins that require it.
mccabe
only ever reports one violation
- C901
based on the complexity value provided by the user.
Users should also reference pycodestyle's list of error codes.