当前位置:  开发笔记 > 编程语言 > 正文

PyLint消息:logging-format-interpolation

如何解决《PyLint消息:logging-format-interpolation》经验,为你挑选了1个好方法。

对于以下代码:

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

pylint 产生以下警告:

记录格式插值(W1202):

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

我知道我可以关掉这个警告,但我喜欢理解它.我假设使用format()是打印输出语句的首选方法pylint.为什么记录器语句不适用?



1> sthenault..:

对于logger语句来说并不是这样,因为它依赖于像string这样的前"%"格式,使用给予记录器调用的额外参数来提供此字符串的延迟插值.例如,而不是做:

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

你应该做

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

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

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


根据文档的优化部分logging:

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


但这是否意味着我们以后会遇到代码维护问题?我们以后会被pylint"推荐"在某个时候移动到`.format()`样式,因为`logging`已经升级了吗?我问,因为我对可维护性比对前沿速度性能更感兴趣,至少对于大多数任务而言.
是否有一个很好的参考,这个懒惰的评估是首选和有所作为?我在[PEP282](https://www.python.org/dev/peps/pep-0282/)或[日志库](https://docs.python.org/2/library)中找不到一个/logging.html)
@pfnuesel,.format()在调用logger.error之前展开,而"延迟插值"意味着只在需要时才进行扩展(例如,消息实际显示在某处)
尽管警告背后的动机大多与性能有关(即:如果未发出日志语句,则可以节省内插成本),但值得注意的是,在许多(可以说是大多数)应用程序中,性能成本可以忽略不计。参见:https://github.com/PyCQA/pylint/issues/2395和https://github.com/PyCQA/pylint/issues/2354
@MikeWilliamson:我认为此消息是警告,因为可能存在副作用,但是您可以放心地忽略它。
推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有