Code Style

Flake8:

python -m pip install flake8


Чтобы начать использовать Flake8 , откройте интерактивную оболочку и запустите:

flake8 path/to/code/to/check.py

# or

flake8 path/to/code/


Если вы хотите видеть только экземпляры определенного предупреждения или ошибки, вы можете выбрать эту ошибку следующим образом:

flake8 --select E123,W503 path/to/code/


Если вы хотите игнорировать только одно конкретное предупреждение или ошибку:

flake8 --ignore E24,W504 path/to/code/


Показать версию Flake8

flake8 --version


Выведите общее количество ошибок.

flake8 --count dir/


Список игнорируемых кодов

flake8 --ignore=E121,E123 dir/

flake8 --ignore=E24,E704 dir/


flake8 --disable-noqa dir/

Добавив в файл# flake8: noqa

example = lambda: 'example'  # noqa: E731


Подсчитайте количество появлений каждого кода ошибки / предупреждения и распечатайте отчет.

flake8 --statistics

E1 Отступ 
E101 отступ содержит смешанные пробелы и табуляции 
E111 отступ не кратен четырем 
E112 ожидается блок с отступом 
E113 неожиданный отступ 
E114 отступ не кратен четырем (комментарий) 
E115 ожидается блок с отступом (комментарий) 
E116 неожиданный отступ (комментарий) 
E117 с чрезмерным отступом 
E121 (* ^) линия продолжения с нижним отступом для висячего отступа 
E122 (^) Продолжение строки отсутствует или имеет отступ 
E123 (*) закрывающая скобка не соответствует отступу строки открывающей скобки 
E124 (^) закрывающая скобка не соответствует визуальному отступу 
E125 (^) строка продолжения с тем же отступом, что и следующая логическая строка 
E126 (* ^) линия продолжения с избыточным отступом для висячего отступа 
E127 (^) линия продолжения с избыточным отступом для визуального отступа 
E128 (^) линия продолжения с недостаточным отступом для визуального отступа 
E129 (^) строка с визуальным отступом с тем же отступом, что и следующая логическая строка 
E131 (^) линия продолжения не выровнена для висячего отступа 
E133 (*) в закрывающей скобке отсутствует отступ 
E2 Пробел 
E201 пробел после '(' 
E202 пробел перед ')' 
E203 пробел перед ':' 
E211 пробел перед '(' 
E221 несколько пробелов перед оператором 
E222 несколько пробелов после оператора 
E223 вкладка перед оператором 
E224 табуляция после оператора 
E225 отсутствует пробел вокруг оператора 
E226 (*) пропущенный пробел вокруг арифметического оператора 
E227 отсутствие пробелов вокруг побитового оператора или оператора сдвига 
E228 отсутствует пробел вокруг оператора по модулю 
E231 пропущенные пробелы после ',', ';' или ':' 
E241 (*) несколько пробелов после ',' 
E242 (*) табуляция после ',' 
E251 неожиданные пробелы вокруг ключевого слова / параметра равно 
E261 не менее двух пробелов перед встроенным комментарием 
E262 встроенный комментарий должен начинаться с символа '#' 
E265 комментарий блока должен начинаться с символа '#' 
E266 слишком много ведущих '#' для комментария блока 
E271 несколько пробелов после ключевого слова 
E272 несколько пробелов перед ключевым словом 
E273 табуляция после ключевого слова 
E274 табуляция перед ключевым словом 
E275 отсутствует пробел после ключевого слова 
E3 Пустая строка 
E301 ожидается 1 пустая строка, найдено 0 
E302 ожидается 2 пустые строки, найдено 0 
E303 слишком много пустых строк (3) 
E304 после декоратора функции найдены пустые строки 
E305 ожидается 2 пустые строки после окончания функции или класса 
E306 ожидалась 1 пустая строка перед вложенным определением 
E4 Импортировать 
E401 множественный импорт в одной строке 
E402 импорт на уровне модуля не в верхней части файла 
E5 Длина линии 
E501 (^) строка слишком длинная (82> 79 символов) 
E502 обратная косая черта между скобками повторяется 
E7 Заявление 
E701 несколько операторов в одной строке (двоеточие) 
E702 несколько операторов в одной строке (точка с запятой) 
E703 инструкция заканчивается точкой с запятой 
E704 (*) несколько операторов в одной строке (по умолчанию) 
E711 (^) сравнение с None должно быть 'if cond is None:' 
E712 (^) сравнение с True должно быть 'if cond is True:' или 'if cond:' 
E713 тест на членство должен быть "не в" 
E714 проверка на идентичность объекта должна быть "не является" 
E721 (^) не сравнивайте типы, используйте isinstance () 
E722 не используйте bare except, вместо этого укажите исключение 
E731 не назначайте лямбда-выражение, используйте def 
E741 не используйте переменные с именами 'l', 'O' или 'I' 
E742 не определяйте классы с именами 'l', 'O' или 'I' 
E743 не определяйте функции с именами 'l', 'O' или 'I' 
E9 Время выполнения 
E901 SyntaxError или IndentationError 
E902 IOError 
W1 Предупреждение об отступе 
W191 отступ содержит табуляцию 
W2 Предупреждение о пробеле
W291 конечный пробел 
W292 нет новой строки в конце файла 
W293 пустая строка содержит пробелы 
W3 Предупреждение о пустой строке 
W391 пустая строка в конце файла 
W5 Предупреждение о разрыве строки 
W503 (*) разрыв строки перед бинарным оператором
W504 (*) разрыв строки после бинарного оператора 
W505 (* ^) строка документа слишком длинная (82> 79 символов) 
W6 Предупреждение об устаревании 
W601 .has_key () устарел, используйте 'in' 
W602 устаревшая форма вызова исключения 
W603 '<>' устарело, используйте '! =' 
W604 обратные кавычки устарели, используйте 'repr ()' 
W605 недопустимая escape-последовательность 'x' 
W606 async и await - зарезервированные ключевые слова, начиная с Python 3.7.

Признаки "плохого кода"

Кратко рассмотрим 12 признаков, когда код можно улучшить: 1. Duplicated Code  — иногда повторяющийся код не всегда несет в себе пользу. Выде...