Как отключить предупреждение Pylint?

Я пытаюсь отключить предупреждение C0321 ( "более одного оператора в одной строке" - я часто ставил операторы if с короткими однострочными результатами в одной строке), в Pylint 0.21.1 (if это важно: astng 0.20.1, общий 0.50.3, Python 2.6.6 (r266: 84292, 15.09.2010, 16:22:56)).

Я попытался добавить disable=C0321 в файл конфигурации Pylint, но Pylint настаивает на том, чтобы сообщить об этом. Вариации на этой строке (например, disable=0321 или disable=C321) помечены как ошибки, поэтому Pylint действительно распознает параметр правильно, он просто игнорирует его.

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

Ответ 1

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= внутри него в разделе [MESSAGES CONTROL].

Ответ 2

У меня была эта проблема с использованием Eclipse и я решил ее следующим образом:

в папке pylint (например, C:\Python26\Lib\site-packages\pylint), удерживая C:\Python26\Lib\site-packages\pylint shift, щелкните правой кнопкой мыши и выберите команду windows для открытия в этой папке. Тип:

lint.py --generate-rcfile > standard.rc

Это создает файл конфигурации standard.rc. Откройте его в блокноте и в разделе [MESSAGES CONTROL] раскомментируйте disable= и добавьте идентификатор сообщения, который вы хотите отключить, например:

disable=W0511, C0321

Сохраните файл и в окне Eclipse-> → 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 (окна - показать представление - консоль, выберите консоль Pylint из параметров консоли, кроме значка консоли).

Ответ 3

Начиная с версии Pylint v. 0.25.3, вы можете использовать символические имена для отключения предупреждений вместо того, чтобы запоминать все эти кодовые номера. Например:

# pylint: disable=locally-disabled, multiple-statements, fixme, line-too-long

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

Соответствие между символическими именами и кодами можно найти здесь.

Комментарий об отключении можно вставить в отдельной строке, применив отключение ко всему, что последует в том же блоке. В качестве альтернативы, он может быть вставлен в конец строки, для которой он предназначен.

Если pylint выводит сообщения " Locally disabling ", вы можете избавиться от них, включив сначала отключение locally-disabled как в примере выше.

Ответ 4

Чтобы отключить предупреждение локально в блоке, добавьте

# pylint: disable=C0321

к этому блоку.

Ответ 5

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

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

  • В одном или нескольких файлах pylintrc.

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

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

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

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

  • Если у вас есть домашний каталог, который не является /root:

    • ~/.pylintrc; или

    • ~/.config/pylintrc; или

    • /etc/pylintrc

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

В свой pylintrc файл добавьте строки для отключения определенных сообщений 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 not disable), чтобы остановить подавление.

Обратите внимание, что при отключении для одной строки с использованием синтаксиса # pylint при отключении для этой строки используется синтаксис # pragma pylint. Их легко путать, особенно при копировании и вклеивании.

Совместное использование всего

Я обычно использую сочетание этих подходов.

  • Я использую ~/.pylintrc для абсолютно глобальных стандартов - очень немногие из них.

  • Я использую уровень проекта pylintrc на разных уровнях в модулях Python, когда существуют стандарты для проекта. Особенно, когда вы принимаете код от другого человека или команды, вы можете обнаружить, что они используют соглашения, которые вам не нравятся, но вы не хотите переделывать код. Сохранение настроек на этом уровне помогает не распространять эти методы на другие проекты.

  • Я использую прагмы стиля блока в верхней части файлов с одним источником. Мне нравится отключать прагмы (прекращать подавление сообщений) в разгар развития даже для стандартов Пилинта, с которыми я не согласен (например, "слишком мало публичных методов" - я всегда получаю это предупреждение на пользовательских классах исключений) - но полезно видеть больше/возможно все сообщения Pylint во время разработки. Таким образом, вы можете найти случаи, которые вы хотите адресовать с помощью однострочных прагм (см. Ниже), или просто добавьте комментарии для следующего разработчика, чтобы объяснить, почему в этом случае это предупреждение в порядке.

  • Я оставляю некоторые прагмы в блочном стиле включенными даже тогда, когда код готов к регистрации. Я пытаюсь использовать некоторые из них, но когда это имеет смысл для модуля, это нормально делать в документации. Однако я стараюсь оставлять как можно меньше, желательно ни одного.

  • Я использую стиль однострочного комментария для решения особенно сильных ошибок. Например, если есть место, где имеет смысл делать except Exception as exc, я помещаю # pylint: disable=broad-except в эту строку вместо более глобального подхода, потому что это странное исключение, и его нужно вызывать, в основном как форму документации.


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

Ответ 6

Вы также можете использовать следующую команду:

pylint --disable=C0321  test.py

Моя версия pylint - 0.25.1.

Ответ 7

Это часто задаваемые вопросы:

4.1 Можно ли локально отключить конкретное сообщение?

Да, эта функция была добавлена в Pylint 0.11. Это может быть сделано путем добавления
"#pylint: disable = some-message, another-one" на желаемом уровне блока или в конце нужной строки кода.

Вы можете отключить сообщения либо по коду, либо по символическому имени. См. Документацию (или запустите pylint --list-msgs в терминале) для получения полного списка сообщений pylint.
Документы также предоставляют хороший пример того, как использовать эту функцию.

Ответ 8

Если это помогает кому-то, если вы используете Visual Studio Code, он ожидает, что файл будет в кодировке UTF8. Чтобы сгенерировать файл, я запустил pylint --generate-rcfile | out-file -encoding utf8 .pylintrc в PowerShell.

Ответ 9

Синтаксис Python допускает использование нескольких операторов в строке, разделенных точкой с запятой (;). Однако ограничение каждой строки одним оператором облегчает человеку следовать логике программы при ее чтении.

Итак, еще один способ решения этой проблемы, это понять, почему сообщение lint присутствует, а не помещать в строку более одного утверждения.

Да, вам может быть проще написать несколько операторов в строке, однако, pylint для любого другого читателя вашего кода, а не только для вас.

Ответ 10

Вам просто нужно добавить одну строку, чтобы отключить то, что вы хотите отключить. Например

#pylint: disable = line-too-long, too-many-lines, no-name-in-module, import-error, multiple-imports, pointless-string-statement, wrong-import-order

Добавьте это на # 1 в вашем модуле