问题描述
对于以下代码:
logger.debug('message: {}'.format('test'))
pylint 产生以下警告:
记录格式插值 (W1202):
在日志记录函数中使用 % 格式并将 % 参数传递为参数 当日志语句的调用形式为记录.(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:
消息参数的格式被推迟到无法避免为止.但是,计算传递给 logging 方法的参数也可能很昂贵,如果 logger 只是丢弃您的事件,您可能希望避免这样做.
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 消息:记录格式插值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)