Сообщение 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().
согласно оптимизация на
loggingdocs:форматирование аргументов сообщения откладывается до тех пор, пока этого нельзя избежать. Однако вычисление аргументов, переданных методу ведения журнала, также может быть дорогостоящим, и вы можете избежать этого, если регистратор просто выбросит ваше событие.