PyLint消息:logging格式插值

对于下面的代码:

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

pylint产生以下警告:

logging格式插值(W1202):

在logging函数中使用%格式,并将参数作为parameter passing。当logging语句具有调用格式“logging。(format_string.format(format_args …))”时使用。 这样的调用应该使用%格式来代替,但是通过传递参数作为参数来对logging函数进行插值。

我知道我可以关掉这个警告,但是我想明白这一点。 我认为使用format()是在python3打印语句的首选方法。 为什么logging器陈述不正确?

对于logger语句来说这是不正确的,因为它依赖于以前的“%”格式,比如string,通过给logging器调用提供额外的参数来提供这个string的延迟插值。 例如,而不是做:

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

你应该做

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

所以只有在消息被实际发射的时候才会插入string。

使用.format()时,您无法使用此function。


根据logging文档的优化部分:

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