Как отключить предупреждение Pylint?
Я пытаюсь отключить предупреждение C0321 ("более одного оператора в одной строке" - я часто ставлю if операторы с короткими однострочными результатами в одной строке), в Pylint 0.21.1 (если это имеет значение: astng 0.20.1, common 0.50.3, Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56)).
Я пробовал добавлять disable=C0321 в файле конфигурации Pylint, но Pylint настаивает на том, чтобы сообщить об этом в любом случае. Вариации на этой линии (например disable=0321 или disable=C321) помечаются как ошибки, поэтому Pylint тут распознать вариант правильно, это просто игнорируя его.
это ошибка Pylint, или я делаю что-то неправильно? Есть ли способ обойти это? Мне бы очень хотелось избавиться от этого шума.
9 ответов:
pylint --generate-rcfileпоказывает это так:[MESSAGES CONTROL] # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option # multiple time. #enable= # Disable the message, report, category or checker with the given id(s). You # can either give multiple identifier separated by comma (,) or put this option # multiple time (only on the command line, not in the configuration file where # it should appear only once). #disable=так это выглядит как ваш
~/.pylintrcдолжно бытьdisable=строки/s, в нем внутри раздела[MESSAGES CONTROL].
у меня была эта проблема с помощью затмение и решил ее следующим образом:
в папке pylint (например,
C:\Python26\Lib\site-packages\pylint), удерживайте shift, щелкните правой кнопкой мыши и выберите, чтобы открыть команду windows в этой папке. Тип:lint.py --generate-rcfile > standard.rcсоздает
standard.rcфайл конфигурации. Откройте его в блокноте и под[MESSAGES CONTROL]раскомментируйтеdisable=и добавить идентификатор сообщения, который вы хотите отключить, например:disable=W0511, C0321сохраните файл, и в Eclipse - > window - >preferences - >PyDev - >pylint, в поле аргументы введите:
--rcfile=C:\Python26\Lib\site-packages\pylint\standard.rcтеперь это должно работать ...
вы можете добавить комментарий в верхней части кода, который будет интерпретироваться pylint:
# pylint: disable=C0321
ссылка на все коды сообщений pylint
добавив, например,
--disable-ids=C0321в поле аргументы не работают. Все доступные сообщения pylint хранятся в словарь_messagesатрибут экземпляраpylint.utils.MessagesHandlerMixInкласса. При запуске pylint с аргументом--disable-ids=...(по крайней мере, без файла конфигурации), этот словарь изначально пуст, вызывая исключение KeyError в pylint (pylint.utils.MessagesHandlerMixIn.check_message_id(). В Eclipse вы можете увидеть это сообщение об ошибке в консоли Pylint (windows - show view-Console, выберите консоль Pylint из параметров консоли помимо значка консоли.)
начиная с Pylint V. 0.25.3, вы можете использовать символические имена для отключения предупреждений вместо того, чтобы помнить все эти кодовые номера. Например:
# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-longэтот стиль более поучителен, чем шифрованные коды ошибок, а также более практичен, поскольку новые версии Pylint выводят только символическое имя, а не код ошибки.
соответствие между символическими именами и кодами можно найти здесь.
отключить комментарий может быть вставлен в свою собственную строку, применяя disable ко всему, что происходит после в том же блоке. В качестве альтернативы, он может быть вставлен в конце строки, для которой он предназначен для применения.
Если pylint выводит"
Locally disabling" сообщения, Вы можете избавиться от них, в том числе запретитьlocally-disabledпервый как в примере выше.
есть несколько способов отключить предупреждения и ошибки от Pylint. Какой из них использовать имеет отношение к тому, как глобально или локально вы хотите применить инвалидность-важное дизайнерское решение.
Несколько Подходов
- в одном или нескольких
pylintrcфайлы.это включает в себя больше, чем
~/.pylintrcфайл (в вашем каталоге $HOME), как описано Крисом Морганом. Pylint будет искать rc-файлы с приоритетом что значения" ближе " файлы более высоко:
A
pylintrcфайл в текущем рабочем каталоге; илиесли текущий рабочий каталог находится в модуле Python (т. е. он содержит
__init__.pyfile), поиск вверх по иерархии модулей Python до apylintrcфайл найден; илифайл, названный переменной среды PYLINTRC; или
если у вас есть домашний каталог это не
/root:
~/.pylintrc; или
~/.config/pylintrc; или
/etc/pylintrcобратите внимание, что большинство из этих файлов называются
pylintrc-- только файл в~ведущая точка.на
pylintrcfile, добавьте строки, чтобы отключить определенные сообщения pylint. Например:[MESSAGES CONTROL] disable=locally-disabled
далее отключается от
pylintкомандная строка, как описано Aboo и Cairnarvon. Это выглядит какpylint --disable=bad-builtin. Повторите--disableдля подавления дополнительных элементов.далее отключается от отдельных строк кода Python, как описано в Imolit. Они выглядят как
some statement # pylint: disable=broad-except(дополнительный комментарий в конце исходной строки) и применить только к текущей строке. Мой подход заключается в том, чтобы всегда помещать их в конец других строк кода, чтобы их не путали с блоком стиль, см. ниже.дополнительно отключает определенные для больших блоков кода Python, вплоть до полных исходных файлов.
они выглядят как
# pragma pylint: disable=bad-whitespace(обратите внимание наpragmaключевое слово).эти применяется к каждой строке после "ПРАГМА". Размещение блока из них в верхней части файла делает подавления применяются ко всему файлу. Помещая один и тот же блок ниже в файл, они применяются только к линии, следующие за блоком. Мой подход заключается в том, чтобы всегда ставить их на линию самостоятельно, чтобы их не путали с однострочным стилем, см. выше.
когда подавление должно применяться только в пределах диапазона кода, используйте
# pragma pylint: enable=bad-whitespace(теперь с помощьюenableнеdisable), чтобы остановить подавление.обратите внимание, что отключение для одной строки использует
# pylintсинтаксис при отключении для этой строки вперед использует# pragma pylintсинтаксис. Их легко спутать, особенно при копировании и вставке.Собираем Все Вместе
я обычно использую сочетание этих подходов.
я использую
~/.pylintrcдля абсолютно глобальных стандартов -- очень мало из них.я использую project-level
pylintrcна разных уровнях в модулях Python, когда существуют стандарты для конкретных проектов. Особенно, когда вы принимаете код от другого человек или команда, вы можете обнаружить, что они используют соглашения, которые вы не предпочитаете, но вы не хотите переделывать код. Сохранение настроек на этом уровне помогает не распространять эту практику на другие проекты.я использую прагмы стиля блока в верхней части одиночных исходных файлов. Мне нравится отключать прагмы (перестать подавлять сообщения) в пылу развития даже для стандартов Pylint, с которыми я не согласен (например, "слишком мало публичных методов" - я всегда получаю это предупреждение пользовательские классы исключений) - но полезно видеть больше / возможно, все сообщения Pylint во время разработки. Таким образом, вы можете найти случаи, которые вы хотите решить с помощью однострочных прагм (см. ниже), или просто добавить комментарии для следующего разработчика, чтобы объяснить, почему это предупреждение в этом случае нормально.
я оставляю некоторые прагмы блочного стиля включенными, даже когда код готов к регистрации. Я пытаюсь использовать несколько из них, но когда это имеет смысл для модуля, это нормально сделайте как документация. Однако я стараюсь оставить как можно меньше, предпочтительно ни одного.
я использую стиль однострочного комментария для устранения особенно мощных ошибок. Например, если есть место, где это действительно имеет смысл делать
except Exception as exc, я поставил# pylint: disable=broad-exceptна этой линии вместо более глобального подхода, потому что это странное исключение и должно быть вызвано, в основном, как форма документации.
как все остальное в Python, вы можете действовать на разных уровнях абстрагирования. Мой совет-думать о том, что принадлежит на каком уровне, чтобы вы не закончили слишком мягким подходом к Pylint.
вы также можете использовать следующую команду:
pylint --disable=C0321 test.pyмоя версия pylint-0.25.1.
Это FAQ:
4.1 можно ли локально отключить конкретное сообщение?
Да, эта функция была добавлена в Pylint 0.11. Это может быть сделано путем добавление
"#pylint: disable=some-message, another-one " по желанию уровень блока или в конце нужной строки кода.вы можете отключить сообщения либо по коду, либо по символическому имени. Смотрите docs (или
pylint --list-msgsв терминал) для полного списка сообщений pylint.
Документы также обеспечивают хороший пример как использовать эту функцию.
в случае, если это помогает кому-то, если вы используете код Visual Studio, он ожидает, что файл будет в кодировке UTF8. Чтобы сгенерировать файл, я запустил
pylint --generate-rcfile | out-file -encoding utf8 .pylintrcв PowerShell.
синтаксис Python допускает несколько операторов в строке, разделенных точкой с запятой (;). Однако, ограничивая каждую строку одним утверждением, человеку легче следовать логике программы при ее чтении.
Итак, другой способ решения этой проблемы-понять, почему сообщение lint существует и не помещает более одного оператора в строку.
Да, вы можете найти его легче написать несколько операторов в строке, однако, pylint для каждого другого читатель Вашего кода не только вы.
Comments