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

В моем заголовке есть такая строчка:

import config.logging_settings

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

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

В противном случае также будут оценены такие вещи:

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

person The Unfun Cat    schedule 03.03.2015    source источник


Ответы (5)


Управление сообщениями 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

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

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

person jomo    schedule 10.04.2015
comment
Мне нравится flake8 s # noqa. Я не хочу видеть в коде столько комментариев. # nolint было бы еще яснее. - person Nils Lindemann; 04.06.2020
comment
@NilsLindemann Обратной стороной этого является то, что вы теряете информацию о том, каких сообщений вы избегали. Вы можете случайно скрыть сообщение, которое не хотели (возможно, из-за изменений в будущей версии или чего-то еще). - person Pierce Darragh; 24.04.2021
comment
@PierceDarragh, если эта точность необходима, можно добавить один или несколько кодов ошибок или классов кодов ошибок. Например, в def foo() :return 1 is 1 добавление # noqa: E203 не будет сообщать о пробеле перед :. Добавление # noqa: E2 не сообщит о проблемах, связанных с пробелами. Но об использовании is вместо == все равно будет сообщено. См. flake8s и коды ошибок pycodestyles. Дополнительная информация. - person Nils Lindemann; 24.04.2021

import config.logging_settings # pylint: disable=W0611

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

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

import config.logging_settings # pylint: disable=unused-import
person The Unfun Cat    schedule 03.03.2015
comment
Откуда вы берете явный символ сообщения? Мой линтер (тот, что находится в spyder) не сообщает об этом, и вики, ссылка на которую есть в ответе jomo, тоже не перечисляет его. - person Joooeey; 15.05.2018
comment
Вы имеете в виду unused-import? Я думаю, что мой линтер предупреждал меня, когда я использовал W0611, но прошло ›3 года, поэтому я не помню: / Извините - person The Unfun Cat; 15.05.2018

Оформить заказ на файлы в 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
person loxaxs    schedule 11.11.2018
comment
вы можете найти их все в документации - person Esteban; 21.01.2019
comment
Спасибо, это намного лучше, чем просматривать исходники. Я нашел еще два зеркала для pylint doc. Очевидно, официальным зеркалом является readthedoc. Другой - pylint.org. - person loxaxs; 22.01.2019

Я считаю, что вы ищете ...

import config.logging_settings  # @UnusedImport

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

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

person Basic    schedule 03.03.2015
comment
Это могло сработать для некоторых IDE, но не сработало для emacs/flycheck. Спасибо. Сохраните ответ, так как он может помочь кому-то другому. - person The Unfun Cat; 03.03.2015
comment
Это не работает при запуске pylint или flake8 из командной строки. - person Jacob Tomlinson; 19.08.2016
comment
@JacobTomlinson Интересно, спасибо. Это то, что принимает Pydev, и у меня сложилось впечатление, что pyclipse просто превратился в пилинт. Должен быть либо немного настроен, либо, возможно, eclipse обрабатывает эти директивы и подавляет вывод. - person Basic; 19.08.2016

В дополнение к принятому ответу:

Вы можете повторно включить проверку ошибок, добавив pylint: enable:SPECIFIC_ERROR

Например, у меня в коде есть:

import time
import datetime
import os
import sys
# pylint: disable=import-error
import serial
# pylint: enable=import-error

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

person Alejo Dev    schedule 16.04.2021