按照 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 必须在函数调用之前执行字符串操作:
我正在记录一些信息消息,并想确保我遵循了 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 必须在函数调用之前执行字符串操作: