我有调试语句,如: logging.debug('来自scan的输出:',输出[0]) 事情是在标志为True之前输出不存在。 因此,即使logging.Level不是debug,它也会执行此行,尽管它不会保存。
只有当flag为True时才能执行此语句。
我想避免在每个调试语句之前检查标志,而是在运行时不应该执行这些调试语句来处理这种情况。
答案 0 :(得分:0)
我强烈建议不要在不了解变量的情况下工作。话虽如此,如果你有一个用例,Python将提供。
我在这里可能做的是将对cal.debug的调用包装在可调用的后面。同样,我不确定您的用例是什么,但这是一个简短的概念验证。
import logging
some_condition = True
logging.basicConfig(level=logging.DEBUG)
def lazy_log(callable):
if logging.getLogger('').isEnabledFor(logging.DEBUG):
logging.debug(callable())
def main():
if some_condition:
outputs = [1,2,3,4]
lazy_log(lambda: "Outputs from scan: {}".format(outputs[1]))
main()
通过使用lambda
,我们推迟记录字符串的计算,直到我们知道需要它为止。这样做的另一个好处是,如果我想用一个非常慢的东西制作一个调试日志,比如一个数据库查询,我的调试语句根本不会减慢我的生产程序。