Подтвердить что ты не робот

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

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

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

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

logging-format-интерполяция (W1202):

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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


В разделе Optimization logging docs:

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