str.format()引发KeyError


79

以下代码引发KeyError异常:

addr_list_formatted = []
addr_list_idx = 0

for addr in addr_list: # addr_list is a list
    addr_list_idx = addr_list_idx + 1
    addr_list_formatted.append("""
        "{0}"
        {
        "gamedir"  "str"
        "address"  "{1}"
        }
    """.format(addr_list_idx, addr))

为什么?

我正在使用Python 3.1。


1
您可能可以通过列表理解来完成相同的任务(用于enumerate获取索引)。
SwiftsNamesake 2015年

Answers:


140

问题是您那里的那些{}字符没有指定格式化键。您需要将它们加倍,因此将代码更改为:

addr_list_formatted.append("""
    "{0}"
    {{
    "gamedir"  "str"
    "address"  "{1}"
    }}
""".format(addr_list_idx, addr))

12
如果有人想在Python中使用JSON怎么办?
fijiaaron

4
@fijiaaron{答案的双重意思是告诉format方法此处没有要格式化的键(因此它们在格式化的字符串中转义了,以这种方式构建JSON应该不成问题)。另外,还有其他有效的方式来操作字符串,例如join"".join(['{"', var_name, '":', value, '}'])
mgc

我几乎迷失了头脑,直到发现问题所在
德米特里·坎卡洛维奇

1
@DmitryKankalovich您已经失去了主意,Stack Overflow和这里的每个人都只是您想象力的虚构。(至少我一直这样告诉自己):)
Lasse V. Karlsen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.