当前位置: 首页 > 面试题库 >

PyLint消息:日志记录格式插值

山煜祺
2023-03-14
问题内容

对于以下代码:

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

pylint 产生以下警告:

日志记录格式插值(W1202):

在日志记录函数中使用%格式,并将%参数作为参数传递。在日志记录语句的调用形式为“
logging。(format_string.format(format_args
…))”时使用。这样的调用应改为使用%格式,但通过将参数作为参数传递,将插值留给日志记录函数。

我知道我可以关闭此警告,但我想理解它。我假定使用format()是在Python 3中打印语句的首选方法。为什么这对于logger语句不是正确的?


问题答案:

logger语句不是正确的,因为它依赖于以前的“%”格式(如字符串)使用赋予logger调用的额外参数来对该字符串进行延迟插值。例如,而不是做:

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

你应该做

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

因此,仅当实际发出消息时才对字符串进行插值。

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

根据文档的“优化”部分logging

消息参数的格式将推迟到无法避免为止。但是,计算传递给日志记录方法的参数也可能很昂贵,并且如果记录器只会丢弃事件,则可能要避免这样做。



 类似资料:
  • 问题内容: 我正在使用Python的机制将输出打印到屏幕上。我可以使用print语句来做到这一点,但是我想允许用户调整更好的粒度以禁用某些类型的输出。我喜欢为错误打印的格式,但是当输出级别为“信息”时,我希望使用更简单的格式。 例如: 在此示例中,我希望以不同的方式打印错误的格式: 是否可以在没有多个日志记录对象的情况下针对不同的日志级别使用不同的格式?我宁愿在创建记录器后就不修改它,因为有大量的

  • 问题内容: 我正在使用Python日志记录,由于某种原因,我的所有消息都出现两次。 我有一个配置日志记录的模块: 稍后,我调用此方法来配置日志记录: 然后,在buy_ham模块中,我将调用: 由于某种原因,所有消息都出现两次。我注释掉其中一个流处理程序,还是一样。有点奇怪,不确定为什么会这样…大声笑。假设我错过了一些显而易见的事情。 干杯,维克多 问题答案: 您正在调用两次(也许使用的方法):将返

  • 我希望将具有特定记录器名称、特定级别和更高级别(例如和更高级别)的消息记录到特定日志处理程序(例如文件处理程序),同时仍将所有日志消息发送到控制台。Python是2.7版。 到目前为止,我尝试创建了两个记录器: 根记录器 命名记录器 对于根记录器,我附加了,并将日志级别设置为。 然后,我将一个处理程序附加到命名记录器,并将该记录器的级别设置为。 当我现在调用使用命名记录器的模块时,我不再获得传播到

  • 我正在使用Python 3.8.8和包含的日志库。要在Python中使用通用字符串格式,我还想使用记录新的格式字符串变体。我还想使用日志字符串的延迟评估(因此没有或)。 根据这篇关于pylint的堆栈溢出帖子(因此pylint日志格式样式=new),以下变体应该可以工作。但是,日志记录中有一个异常。信息。 最后一行的例外情况如下: 我从异常消息推断,日志记录仍然需要使用旧式格式,即。 如何在登录P

  • 本文向大家介绍C#记录消息到日志文件的方法,包括了C#记录消息到日志文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#记录消息到日志文件的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 我正在使用“浏览”检查我的代码。Pylint返回了关于我的调试消息的日志记录不懒惰警告。 我的代码是: 如何修复pylint中的logging not lazy?