2010-05-02 92 views
43

下面的代碼引起了KeyError例外:str.format()會引發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

你可以使用list comprehension完成同樣的任務(使用'enumerate'獲取indeces)。 – SwiftsNamesake 2015-05-12 16:35:37

回答

82

問題是那些沒有指定格式化鍵的{和}字符。你需要將它們加倍,所以將代碼改爲:

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

如果有人想在Python中使用JSON會怎麼樣? – fijiaaron 2016-06-24 00:47:03

+1

@fijiaaron @fijiaaron在回答中,'{''只是告訴'format'方法,這裏沒有要格式化的密鑰(所以它們被轉換成格式化的字符串,它不應該是構建JSON的問題。辦法)。或者,還有其他有效的方式來處理字符串,如'join'方法:''「.join(['{'',var_name,'」:',value,'}'])' – mgc 2016-06-24 00:57:14