Неужели 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
не игнорирует их.