"Неиспользуемое предупреждение о введении" и pylint
Итак, я работаю над проектом на Python и стараюсь поддерживать его со стандартами с pylint и просто в целом. Итак, у меня есть исходный файл (мы просто назовем его a.py)
#a.py
import loggingsetup
def foo():
log.info("This is a log message")
Но я хочу контролировать, как выглядит журнал, поэтому в loggingsetup у меня есть что-то вроде:
#loggingsetup.py
import logging
logging.root.setLevel(logging.DEBUG)
consoleOut = logging.StreamHandler()
consoleOut.setLevel(logging.INFO)
consoleOut.setFormatter(logging.Formatter("\t"+logging.BASIC_FORMAT))
logging.root.addHandler(consoleOut)
#etc
Теперь это работает нормально. Я предполагаю, что в качестве предварительного вопроса я должен спросить, подходит ли это для этого, или если есть другой способ структурирования моего кода, который был бы предпочтительнее.
Но мой главный вопрос заключается в том, что когда я запускаю pylint на a.py, я получаю предупреждение, подобное "unused import - import loggingsetup", поскольку на самом деле я не вызываю никаких методов или функций из loggingsetup.
Я мог бы сделать что-то вроде переопределения тела loggingsetup как функции и вызвать его, но он кажется глупым и подверженным ошибкам (мне придется беспокоиться о его вызове дважды, если я импортирую loggingsetup из другого места, и если Я понимаю, как python обрабатывает импорт, что не проблема с моей текущей настройкой).
Я мог бы просто сказать pylint игнорировать предупреждение, но я подумал, что сначала попрошу здесь убедиться, что на самом деле это не то, что я должен обрабатывать по-разному.
Ответы
Ответ 1
Подход, который я хотел бы использовать, - это использовать loggingsetup
как своего рода оболочку для logging
.
import logging
# set up logging config here
from logging import *
Затем в ваших других модулях вы:
import loggingsetup as logging
В этом случае вы можете использовать имя, отличное от loggingsetup
, например. tweaked_logging
или logging_with_my_settings
.
Ответ 2
В таких случаях вы можете явно указать pylint, что этот неиспользуемый импорт в предполагаемом:
import loggingsetup # pylint: disable=unused-import
Обратите внимание, что инструкция находится в той же строке, что и импорт, поэтому W0611 отключен только для этой строки, а не для всего блока ниже.
Ответ 3
Если вы используете pylint
и flake8
, вы можете игнорировать неиспользуемое импортное предупреждение в обоих инструментах таким образом:
import loggingsetup # noqa # pylint: disable=unused-import
Ответ 4
Как вы уже упоминали о том, что обертываете его в функцию и явное указание этой установки разрешает это предупреждение. И, как сказал Стивен, это будет считаться лучшим кодом, поскольку он более четко говорит о том, что вы делаете.
Если вы беспокоитесь о вызове этой функции дважды, вы можете, конечно, использовать флаг intern-модуля, чтобы разрешить выполнение тела функции только один раз.
__initialized = False
def init():
if not __initialized:
__initialized = True
#DoStuff
Ответ 5
ваш код должен быть в функции, вызываемой один раз в главном script