Сообщение PyLint: logging-format-interpolation
для следующего кода:
logger.debug('message: {}'.format('test'))
pylint
выдает следующее предупреждение:
logging-format-interpolation (W1202):
используйте % форматирование в функциях ведения журнала и передайте % параметры как аргументы, используемые, когда оператор ведения журнала имеет форму вызова "лесозаготовительный.(строка формата.формат(format_args...))". Такие вызовы должны использовать % форматирование вместо этого, но оставить интерполяцию функция регистрации путем передачи параметры в качестве аргументов.
Я знаю, что могу отключить это предупреждение, но мне нравится его понимать. Я предполагал использовать format()
является предпочтительным способом распечатать инструкции в python3
. Почему это не верно для операторов logger?
1 ответ:
это не верно для оператора logger, потому что он полагается на прежний формат"%", такой как string, чтобы обеспечить ленивую интерполяцию этой строки с использованием дополнительных аргументов, заданных вызову logger. Например, вместо того, чтобы делать:
logger.error('oops caused by %s' % exc)
вы должны сделать
logger.error('oops caused by %s', exc)
таким образом, строка будет интерполирована только в том случае, если сообщение действительно выдается.
вы не можете воспользоваться этой функцией при использовании
.format()
.
согласно оптимизация на
logging
docs:форматирование аргументов сообщения откладывается до тех пор, пока этого нельзя избежать. Однако вычисление аргументов, переданных методу ведения журнала, также может быть дорогостоящим, и вы можете избежать этого, если регистратор просто выбросит ваше событие.