2010-05-02 11 views
43

Poniższy kod podnosi KeyError wyjątek:str.format() podnosi 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)) 

Dlaczego?

Używam Python 3.1.

+1

Prawdopodobnie możesz wykonać to samo zadanie ze zrozumieniem listy (użyj 'wyliczenia', aby uzyskać indeces). – SwiftsNamesake

Odpowiedz

82

Problemem są te {i} znaki, które tam masz, które nie określają klucza do formatowania. Musisz je podwoić, więc zmień kod na:

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

Co jeśli ktoś chciałby użyć JSON w Pythonie? – fijiaaron

+1

@fijiaaron podwójne '{' w odpowiedzi jest po prostu powiedzieć metodzie 'format', że nie ma klucza do sformatowania tutaj (więc są one ujęte w sformatowany ciąg i nie powinno to stanowić problemu dla zbudowania JSON, który droga). Alternatywnie istnieją inne skuteczne sposoby manipulowania łańcuchami, takie jak metoda 'join':' "" .join (['{"', nazwa_zmiennej," ": ', wartość,'} '])' – mgc