Можно ли игнорировать одну конкретную строку с помощью pylint?


150

У меня есть следующая строка в заголовке:

import config.logging_settings

Это на самом деле меняет мои настройки ведения журнала Python, но Pylint считает, что это неиспользованный импорт. Я не хочу удалять unused-importпредупреждения вообще, так можно ли просто игнорировать эту конкретную строку?

Я не против иметь .pylintrcэтот проект, поэтому ответы на изменения в файле конфигурации будут приняты.

В противном случае, что-то вроде этого также будет оценено:

import config.logging_settings # pylint: disable-this-line-in-some-way

Ответы:


228

Управление сообщениями Pylint документировано в руководстве Pylint :

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

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

Вы можете использовать код сообщения или символические имена.

Например

def test():
    # Disable all the no-member violations in this function
    # pylint: disable=no-member
    ...
global VAR # pylint: disable=global-statement

В руководстве также есть дополнительные примеры .

Существует вики, которая документирует все сообщения Pylint и их коды.


Мне нравится flake8 s # noqa. Я не хочу видеть так много комментариев в коде. # nolintбыло бы еще яснее.
Нильс Линдеманн

61
import config.logging_settings # pylint: disable=W0611

Это было просто и конкретно для этой линии.

Как любезно указал sthenault, вы можете и должны использовать более читаемую форму:

import config.logging_settings # pylint: disable=unused-import

Откуда вы получаете явный символ сообщения? Мой линтер (тот, что в spyder) не сообщает об этом, и вики, связанные в ответе jomo, тоже не перечисляют его.
Joooeey

Вы имеете в виду unused-import? Я думаю, что мой линтер дал мне предупреждение, когда я использовал W0611, но он был> 3 года, поэтому я не помню: / Извините
Несчастный кот

4

Я верю, что вы ищете это ...

import config.logging_settings  # @UnusedImport

Обратите внимание на двойной пробел перед комментарием, чтобы избежать появления других предупреждений о форматировании.

Кроме того, в зависимости от вашей IDE (если вы ее используете), возможно, есть возможность добавить правильное правило игнорирования (например, при нажатии Eclipse Ctrl1при наведении курсора на предупреждение автоматически выдвигается предложение).@UnusedImport


2
Это может работать для некоторых IDE, но не работает для emacs/flycheck. Спасибо. Пожалуйста, сохраните ответ, так как он может помочь кому-то еще.
Несчастный кот

Это не работает при запуске pylintили flake8из командной строки.
Джейкоб Томлинсон

@JacobTomlinson Интересно, спасибо. Это то, что принимает Пидев, и у меня сложилось впечатление, что Пиклипс просто перешел в пилинт. Должно быть либо немного настроено, либо, возможно, eclipse обрабатывает эти директивы и подавляет вывод.
Basic

4

Оформить заказ файлов в https://github.com/PyCQA/pylint/tree/master/pylint/checkers . Я не нашел лучшего способа получить имя ошибки из сообщения, чем сочетание клавиш Ctrl + F или использование функции поиска Github:

Если сообщение «Нет имени ... в модуле ...», используйте поиск:

No name %r in module %r repo:PyCQA/pylint/tree/master path:/pylint/checkers

Или, чтобы получить меньше результатов:

"No name %r in module %r" repo:PyCQA/pylint/tree/master path:/pylint/checkers

Github покажет вам:

"E0611": (
    "No name %r in module %r",
    "no-name-in-module",
    "Used when a name cannot be found in a module.",

Затем вы можете сделать:

from collections import Sequence # pylint: disable=no-name-in-module

1
Вы можете найти их все в документах
Esteban

Спасибо, это намного лучше, чем идти через источник. Я нашел еще два зеркала для документа Pylint. Очевидно, readthedoc является официальным зеркалом. Другой - pylint.org
loxaxs
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.