PyLint 消息:日志格式插值 [英] PyLint message: logging-format-interpolation

查看:71
本文介绍了PyLint 消息:日志格式插值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于以下代码:

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

pylint 产生以下警告:

记录格式插值 (W1202):

在日志函数中使用 % 格式并将 % 参数作为arguments 当日志语句的调用形式为记录.(format_string.format(format_args...))".这样的调用应改用 % 格式,但将插值留给通过将参数作为参数传递来记录功能.

Use % formatting in logging functions and pass the % parameters as arguments Used when a logging statement has a call form of "logging.(format_string.format(format_args...))". Such calls should use % formatting instead, but leave interpolation to the logging function by passing the parameters as arguments.

我知道我可以关闭此警告,但我想了解它.我认为使用 format() 是在 Python 3 中打印语句的首选方式.为什么这不适用于 logger 语句?

I know I can turn off this warning, but I'd like to understand it. I assumed using format() is the preferred way to print out statements in Python 3. Why is this not true for logger statements?

推荐答案

对于 logger 语句来说不是这样,因为它依赖于以前的%"格式,如字符串,使用给 logger 调用的额外参数提供此字符串的惰性插值.例如,而不是做:

It is not true for logger statement because it relies on former "%" format like string to provide lazy interpolation of this string using extra arguments given to the logger call. For instance instead of doing:

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

你应该这样做

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

因此只有在实际发出消息时才会插入字符串.

so the string will only be interpolated if the message is actually emitted.

在使用 .format() 时,您无法受益于此功能.

You can't benefit of this functionality when using .format().

根据 logging 文档的 优化 部分:

Per the Optimization section of the logging docs:

消息参数的格式被推迟,直到无法避免.但是,计算传递给日志记录方法的参数也可能很昂贵,如果记录器只会丢弃您的事件,您可能希望避免这样做.

Formatting of message arguments is deferred until it cannot be avoided. However, computing the arguments passed to the logging method can also be expensive, and you may want to avoid doing it if the logger will just throw away your event.

这篇关于PyLint 消息:日志格式插值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆