【问题标题】:Following Python Lazy Logging Formatting, but pylint is still showing (logging-not-lazy) messages遵循 Python Lazy Logging Formatting,但 pylint 仍然显示(logging-not-lazy)消息
【发布时间】:2020-11-18 13:49:25
【问题描述】:

我正在记录一些信息消息,并希望确保我遵循 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 标准?

干杯,

布伦丹

【问题讨论】:

    标签: python unix logging formatting pylint


    【解决方案1】:

    两个字符串之间的+ 的问题在于添加了一个添加操作,该操作必须在调用 LOG.debug 之前在运行时进行评估。

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      你可以通过删除+来修复它:

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

      【讨论】:

        猜你喜欢
        • 2015-05-22
        • 2020-05-01
        • 2022-12-28
        • 2021-10-12
        • 2012-09-15
        • 2018-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多