summaryrefslogtreecommitdiff
path: root/docs/source/user/error-codes.rst
blob: e74675f9ab3ea616e7c3d238b44634757271db6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
.. _error_codes:

=========================
 Error / Violation Codes
=========================

Flake8 and its plugins assign a code to each message that we refer to as an
:term:`error code` (or :term:`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 :term:`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       |
+------+---------------------------------------------------------------------+
| F705 | a ``return`` statement with arguments inside a generator            |
+------+---------------------------------------------------------------------+
| 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``                     |
+------+---------------------------------------------------------------------+
| F812 | list comprehension redefines ``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``    |
+------+---------------------------------------------------------------------+

Note that some of these entries behave differently on Python 2 and Python 3,
for example F812 is specific to Python 2 only.

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 :term:`violation` - ``C901`` based on the
complexity value provided by the user.

Users should also reference `pycodestyle's list of error codes`_.


.. links
.. _pycodestyle's list of error codes:
    https://pycodestyle.readthedocs.io/en/latest/intro.html#error-codes