如何在Python的logging.debug中使用运算符表达式?
解决logging.debug无法直接传表达式参数的问题
这个问题的核心是print和logging.debug的参数逻辑完全不一样:
print可以接受任意多个位置参数,它会自动把每个参数转成字符串后拼接输出;- 但
logging.debug的第一个参数是格式化模板字符串,后面的参数都是用来填充模板里占位符的变量,如果你传了表达式但模板里没有对应占位符,就会触发参数不匹配的报错。
给你几个可行的解决方案:
1. 使用占位符传递表达式结果
这是logging模块的标准用法,用%s(或其他对应类型的占位符)作为模板占位,把表达式放在第二个参数的位置:
logger.debug('Is between now and then: %s', solar_noon < now < solarnoonplustimeunit)
logging会自动把表达式的布尔结果转换成字符串,填充到%s的位置。
2. 使用f-string(Python3.6+适用)
如果你的Python版本是3.6及以上,用f-string可以直接把表达式嵌入字符串里,写法和print非常接近:
logger.debug(f'Is between now and then: {solar_noon < now < solarnoonplustimeunit}')
这种方式更直观,不需要额外处理占位符。
3. 使用str.format()(兼容Python2.7)
从你的报错信息看,你在用Python2.7,那可以用str.format()来实现:
logger.debug('Is between now and then: {}'.format(solar_noon < now < solarnoonplustimeunit))
它的作用和占位符方式类似,只是语法不同,适合Python2.7的环境。
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

