Pylint отключить все предупреждения для файла

86

Мы используем pylint в нашей системе сборки. У нас есть пакет python в нашей кодовой базе, который содержит одноразовый код, и я хотел бы временно отключить все предупреждения для модуля, чтобы я мог перестать беспокоить других разработчиков этими лишними сообщениями. Есть ли простой способ pylint: disableвыводить все предупреждения для модуля?

Mvanveen
источник

Ответы:

120

От FAQ PyLint

Если Pylint <0,25, добавьте

# pylint: disable-all

в начале модуля.

Pylint 0.26.1 и выше переименовали эту директиву в

# pylint: skip-file

(но первая версия будет сохранена для обратной совместимости).

Чтобы упростить поиск, какие модули игнорируются, выдается сообщение информационного уровня I0013. В последних версиях Pylint, если вы используете старый синтаксис, выдается дополнительное сообщение I0014.

эндерскилл
источник
2
Примечание: это отключит все предупреждения и все ошибки . Если вы ищете способ отключить только предупреждения, см. Мой ответ на этой странице.
eatcrayons
31

PyLint имеет пять «категорий» для сообщений (о которых я знаю).

В прошлом эти категории были очевидны, но теперь пронумерованные сообщения Pylint заменены именами. Например, C0302сейчас too-many-lines. Но «C» говорит нам, что too-many-linesэто сообщение конвенции . Это сбивает с толку, потому что сообщения конвенции часто отображаются просто как предупреждение, поскольку многие системы (например, Syntastic ), похоже, классифицируют все как предупреждение или ошибку. Однако отчет PyLint все еще разбивает вещи на эти категории, поэтому он определенно поддерживается.

Ваш вопрос конкретно относится к предупреждениям , и все имена предупреждений PyLint начинаются с 'W'.

Мне было немного сложно отследить это, но этот ответ в конечном итоге привел меня к ответу. PyLint по-прежнему поддерживает отключение целых категорий сообщений. Итак, чтобы отключить все предупреждения , вы должны:

disable=W

Это можно использовать в командной строке:

$ pylint --disable=W myfile.py

Или вы можете поместить его в свой файл pylintrc:

[MESSAGES CONTROL]
disable=W

Примечание: возможно, у вас уже есть disableопция в вашем rc-файле, и в этом случае вы должны добавить «W» в этот список.

Или вы можете встроить его в свой код, где он будет работать в той области, в которую он помещен:

# pylint: disable=W

Чтобы отключить его для всего файла, лучше всего поместить его в самый верх файла. Однако даже в самом верху файла я обнаружил, что все еще получаю trailing-newlinesпредупреждающее сообщение (технически предупреждение соглашения , но я добираюсь до этого).

В моем случае у меня была библиотека, написанная кем-то очень давно. Это работало хорошо, поэтому не было необходимости беспокоиться о современных соглашениях Python и т. Д. Все, что меня действительно волновало, это ошибки, которые, вероятно, нарушат мой код.

Мое решение заключалось в том, чтобы отключить все сообщения с предупреждениями , соглашениями и рефакторингом для этого одного файла, только поместив следующую команду PyLint в первую строку:

# pylint: disable=W,C,R

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

есть мелки
источник
15

Да, вы можете указать # pylint: skip-fileв файле, но отключать все предупреждения для файла - плохая практика.

Если вы хотите отключить только определенные предупреждения, это можно сделать, добавив комментарий, например, # pylint: disable=message-nameчтобы отключить указанное сообщение для оставшейся части файла или, по крайней мере, до # pylint: enable=message-name.

Пример:

# pylint: disable=no-member
class C123:
    def __init__(self):
        self.foo_x = self.bar_x
# pylint: enable=no-member

class C456:
    def __init__(self):
        self.foo_x = self.bar_x
Acumenus
источник
Чтобы избежать сообщения об отключении определенного предупреждения, disable=locally-disabledможно добавить в файл pylintrc.
Полковник Фазакерли
6

Другой вариант - использовать параметр --ignoreкомандной строки, чтобы пропустить анализ некоторых файлов.

Sthenault
источник
0

Мой вариант использования - запустить pylint *.pyдля обработки всех файлов в каталоге, за исключением того, что я хочу пропустить один конкретный файл.

Добавление #pylint: skip-fileпривело к сбою pylint I: 8, 0: Ignoring entire file (file-ignored). Добавление #pylint: disable=file-ignoredэтого не исправляет. Предположительно, это глобальная ошибка, а не файловая.

Решением было включить --disable=file-ignoredпараметры команды pylint. Чтобы понять это, потребовалось слишком много времени; file-ignoredпри явном игнорировании файла не должно быть ошибки.

Курт
источник
1
В идеале, поместите его в pylintrcфайл конфигурации, а не в параметр команды.
Acumenus