Как отключить предупреждение 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, или я делаю что-то неправильно? Есть ли способ обойти это? Мне бы очень хотелось избавиться от этого шума.

948   9  

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: disable=C0321

в этот блок.

есть несколько способов отключить предупреждения и ошибки от Pylint. Какой из них использовать имеет отношение к тому, как глобально или локально вы хотите применить инвалидность-важное дизайнерское решение.

Несколько Подходов

  1. в одном или нескольких pylintrc файлы.

это включает в себя больше, чем ~/.pylintrc файл (в вашем каталоге $HOME), как описано Крисом Морганом. Pylint будет искать rc-файлы с приоритетом что значения" ближе " файлы более высоко:

  • A pylintrc файл в текущем рабочем каталоге; или

  • если текущий рабочий каталог находится в модуле Python (т. е. он содержит __init__.py file), поиск вверх по иерархии модулей Python до a pylintrc файл найден; или

  • файл, названный переменной среды PYLINTRC; или

  • если у вас есть домашний каталог это не /root:

    • ~/.pylintrc; или

    • ~/.config/pylintrc; или

    • /etc/pylintrc

обратите внимание, что большинство из этих файлов называются pylintrc -- только файл в ~ ведущая точка.

на pylintrc file, добавьте строки, чтобы отключить определенные сообщения pylint. Например:

[MESSAGES CONTROL]
disable=locally-disabled
  1. далее отключается от pylint командная строка, как описано Aboo и Cairnarvon. Это выглядит как pylint --disable=bad-builtin. Повторите --disable для подавления дополнительных элементов.

  2. далее отключается от отдельных строк кода Python, как описано в Imolit. Они выглядят как some statement # pylint: disable=broad-except (дополнительный комментарий в конце исходной строки) и применить только к текущей строке. Мой подход заключается в том, чтобы всегда помещать их в конец других строк кода, чтобы их не путали с блоком стиль, см. ниже.

  3. дополнительно отключает определенные для больших блоков кода 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

    Ничего не найдено.