按照 Python 惰性日志记录格式,但 pylint 仍在显示(日志记录非惰性)消息

Following Python Lazy Logging Formatting, but pylint is still showing (logging-not-lazy) messages

我正在记录一些信息消息,并想确保我遵循了 PEP 标准。 Pylint 说这一行:

        LOG.info('Directories have been made in /home/bushbak2/projects/'+
                 'system_file_audit/%s/', manu)

不遵循 python 的惰性日志记录格式。 难道是因为这条线延续了?

这是我从 pylint 收到的消息:

auto_audit.py:157:8: W1201: Use lazy % formatting in logging functions (logging-not-lazy)

为什么 pylint 仍然会引发此消息?我是否没有适当地遵循 PEP 标准?

干杯,

布伦丹

您的问题出在您的表达式中 +。 Pylint 将其视为字符串连接,因此建议您懒惰地进行此连接。

您可以通过删除 +:

来修复它
LOG.info('Directories have been made in /home/bushbak2/projects/'
                 'system_file_audit/%s/', manu)

两个字符串之间 + 的问题是添加了一个添加操作,该操作必须在调用 LOG.debug.

之前在运行时进行评估

即使您的程序没有设置调试日志标志,如果您必须过于频繁地评估这一行,这可能是一个性能问题。

这是logging.debug("this is " + "a test %s", 123)的抽象语法树:

如你所见,函数调用的第一个参数总是有一个加法运算。

另一方面,如果我们使用 logging.debug("this is " "a test %s", 123)(使用空格而不是 + 符号)。 python 编译器生成另一个 AST:

f 弦会怎样?很多人(包括我)都爱上了 python f-strings。如果我们传递一个 f 字符串,结果类似于带有加号的字符串。

logging.debug("this is a test {123}") 的 AST 显示 python 必须在函数调用之前执行字符串操作: