printf 字符串格式化 (UP031)
源自 pyupgrade linter。
有时提供修复。
作用
检查 printf
样式的字符串格式化,并提供将其替换为 str.format
调用的方法。
为什么这不好?
printf
样式的字符串格式化有很多怪癖,并且比使用 str.format
调用或 f 字符串导致更少的代码可读性。通常,优先使用较新的 str.format
和 f 字符串结构,而不是 printf
样式的字符串格式化。
示例
建议改为
修复安全性
在格式字符串包含单个通用格式说明符(例如 %s
),并且右侧是一个模糊表达式的情况下,我们无法提供安全的修复。
例如,给定
val
可以是单元素元组,或单个值(不包含在元组中)。当使用 printf
样式格式化时,两者都将解析为相同的格式化字符串,但在使用 f 字符串时解析方式不同
val = 1
print("%s" % val) # "1"
print("{}".format(val)) # "1"
val = (1,)
print("%s" % val) # "1"
print("{}".format(val)) # "(1,)"