Сообщение PyLint: logging-format-interpolation


для следующего кода:

logger.debug('message: {}'.format('test'))

pylint выдает следующее предупреждение:

logging-format-interpolation (W1202):

используйте % форматирование в функциях ведения журнала и передайте % параметры как аргументы, используемые, когда оператор ведения журнала имеет форму вызова "лесозаготовительный.(строка формата.формат(format_args...))". Такие вызовы должны использовать % форматирование вместо этого, но оставить интерполяцию функция регистрации путем передачи параметры в качестве аргументов.

Я знаю, что могу отключить это предупреждение, но мне нравится его понимать. Я предполагал использовать format() является предпочтительным способом распечатать инструкции в python3. Почему это не верно для операторов logger?

1 73

1 ответ:

это не верно для оператора logger, потому что он полагается на прежний формат"%", такой как string, чтобы обеспечить ленивую интерполяцию этой строки с использованием дополнительных аргументов, заданных вызову logger. Например, вместо того, чтобы делать:

logger.error('oops caused by %s' % exc)

вы должны сделать

logger.error('oops caused by %s', exc)

таким образом, строка будет интерполирована только в том случае, если сообщение действительно выдается.

вы не можете воспользоваться этой функцией при использовании .format().


согласно оптимизация на logging docs:

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