混用f-string与.format()时计算异常?能否在同一行代码中使用两者?
问题解答
可以在同一行同时使用f-string和.format(),但你的代码写法有误,导致减法运算未生效,而且这种混用完全没必要,反而容易出错。
问题出在f-string的解析优先级高于.format():
当你写f"..." .format(...)时,Python会先处理f-string部分,把字符串里的{0}当成f-string的占位符,尝试寻找名为0的变量(正常运行会直接抛出NameError),而非把{0}留给后续的.format()处理。
正确写法(二选一即可)
1. 只用f-string(更简洁推荐)
f-string本身支持直接在占位符中写入表达式,无需额外调用.format():
print(f"Oops {name}, We're sorry but you can try again in {22 - age} years.")
2. 只用.format()
如果习惯用.format(),去掉f前缀,把需要替换的内容按顺序传入即可:
print("Oops {0}, We're sorry but you can try again in {1} years.".format(name, 22 - age))
非要混用的写法(不推荐)
如果硬要同时使用两种方法,需要把f-string里的{}转义为{{}},让f-string解析后留下{0}给.format()处理:
print(f"Oops {name}, We're sorry but you can try again in {{0}} years.".format(22 - age))
但这种写法冗余且易混淆,实际开发中完全没必要这么做。
内容的提问来源于stack exchange,提问作者Kapoor
相关产品推荐
相关产品推荐

