Неужели pep8 не распознает `# noqa` в некоторых случаях?

Из соображений удобства чтения я предпочитаю выравнивать некоторые типы операторов, например, в следующем случае (это включает в себя некоторый код PyParsing, но эта деталь не имеет значения):

_otherwise_stmt = _OTHERWISE ('otherwise statement')
_else_stmt      = _ELSE      ('else statement')
_end_stmt       = _END       ('end statement')

За это, pep8 жалуется на E221 ("несколько пробелов перед оператором") и E211 ("пробел перед '('"). Если я поставлю # noqa в конце каждой из строк, pep8 до сих пор жалуется на эти строки. Тем не менее, для других конструкций в другом месте в моем файле, # noqa работает как положено. Я не понимаю, почему # noqa не делает pep8 работать, как ожидается, для этих конкретных конструкций.

Это ошибка в pep8 программа, или я здесь что-то не так делаю?

3 ответа

Решение

pep8 Сценарий только позволяет отключить определенные коды ошибок с # noqa комментарий.

См. Таблицукодов ошибок; только коды ошибок отмечены (^) можно заставить замолчать таким образом. E211 и E221 не входят в их число (ни один из кодов E2*):

(^) Эти проверки могут быть отключены на уровне линии, используя # noqa специальный комментарий. Эта возможность должна быть зарезервирована для особых случаев.

Лично я предпочитаю использовать flake8 инструмент, который сочетает в себе pep8 с PyFlakes, и позволяет вам использовать # noqa маркер гораздо более либерально.

Это известная проблема ("# noqa не учитывается для большинства ошибок"), в зависимости от того, кого вы спрашиваете.

Инструмент действительно позволяет использовать # noqa для некоторых предупреждений, но не для E221 а также E211,

Вы можете использоватьflake8 --ignore=E2xxза игнорирование любого из кодов E2*, поскольку# noqaне игнорирует их.

Другие вопросы по тегам