为什么在Python中使用str.format会引起Key Error?

3

我在一个Python 2.7.10脚本中有以下代码:

params = {'F': '250', 'I': '-22.5', 'J': '-22.5', 'Y': '12.817175976', 'X': '7.4', 'Z': '-50'}
G3 = 'G3 F {F} I {I} J {J} X {X} Y {Y} Z {Z}  \n'
print(params)
print(G3)
print(G3.format(params))

当我尝试运行它时,它会输出以下内容:
./g-codeGenerator.py
{'F': '250', 'I': '-22.5', 'J': '-22.5', 'Y': '12.817175976', 'X': '7.4', 'Z': '-50'}
G3 F {F} I {I} J {J} X {X} Y {Y} Z {Z} 

Traceback (most recent call last):
  **Traceback truncated**
  File "./g-codeGenerator.py", line 342, in siliconOutputSequence
    print(G3.format(params))
KeyError: 'F'

为什么这会导致关键错误?就我所见,参数中所有需要的元素都存在。
2个回答

5
这是由于.format()不是期望一个字典;它期望关键字参数。将.format({'F': 4})修改为.format(F=4)。要使用你的字典做到这一点,请使用**
print(G3.format(**params))

想了解更多关于参数解包的信息,请参阅文档


扶额谢谢,我现在感觉像个真正的白痴,因为在我的代码片段上面大约4行的地方看到了它,而且它正常工作。 - RobbG
别担心,我花了一分钟才看出你的问题 ;) - zondo

4

您只需要使用 ** 运算符将字典解压到格式字符串中:

print(G3.format(**params))

输出

G3 F 250 I -22.5 J -22.5 X 7.4 Y 12.817175976 Z -50 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接