python-3.x - Python记录新样式格式字符串
问题描述
我正在使用包含日志库的 Python 3.8.8。为了在 Python 中有一个通用的字符串格式,我还想用{}
. 我还想对日志字符串使用惰性求值(所以 no "{}".format(var)
or f"{var}"
)。
根据this Stack Overflow post about pylint(所以 pylint logging-format-style=new
),以下变体应该可以工作。但是,有一个例外logging.info
。
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()
var1 = "foo"
var2 = "blub"
logger.info("var1 {}, var2 {}", var1, var2) # Exception thrown!
最后一行的异常如下:
--- Logging error ---
Traceback (most recent call last):
File "/usr/local/lib/python3.8/logging/__init__.py", line 1081, in emit
msg = self.format(record)
File "/usr/local/lib/python3.8/logging/__init__.py", line 925, in format
return fmt.format(record)
File "/usr/local/lib/python3.8/logging/__init__.py", line 664, in format
record.message = record.getMessage()
File "/usr/local/lib/python3.8/logging/__init__.py", line 369, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
我从异常消息中推断出,日志记录仍然需要使用%s
.
如何在不{}
使用任何其他包装函数的情况下使用新的格式字符串变体登录 Python 3.8.8 (正如 Stack Overflow 上的其他一些帖子所建议的那样)?虽然可以在 pylint 中定义,但如果没有任何包装函数,这可能是不可能的吗?
解决方案
我认为 Python 字符串插值更容易使用:
logger.info(f"var1 {var1}, var2 {var2}")
实现惰性求值,
if logger.isEnabledFor(logging.INFO):
logger.info(f"var1 {var1}, var2 {var2}")
推荐阅读
- python - 更新训练的对象检测模型以对应 TF 更新
- svn - 自动更新 svn:external
- javascript - 在构造函数中使用 plainToClass
- android - Android:为什么 ID 为“EST”的时区为 useDaylightTime() 返回 false
- r - 在 ggplot 中绘制多边形时 is.finite(x) 出错
- sql - 删除 Redshift 架构中的所有表 - 不删除权限
- nginx - 使用 nginx 和 kubernetes 拒绝连接
- apache-kafka - Kafka 消费者正在读取重新启动时最后提交的偏移量(Java)
- python - 使用表达式检索优化变量值
- c# - 如何在 .aspx 文件里面访问声明的变量
标记元素?