2010-05-02 13 views
43

El siguiente código plantea una KeyError excepción:str.format() lanza 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)) 

¿Por qué?

Estoy usando Python 3.1.

+1

Probablemente pueda realizar la misma tarea con una lista de comprensión (use 'enumerate' para obtener los indeces). – SwiftsNamesake

Respuesta

82

El problema son los {y} caracteres que tiene allí que no especifican una clave para el formateo. Necesita duplicarlos, así que cambie el código a:

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

¿Qué pasa si alguien quiere usar JSON en Python? – fijiaaron

+1

@fijiaaron el doble '{' en la respuesta es simplemente decirle al método 'format' que no hay ninguna clave para formatear aquí (por lo que se escapan en la cadena de formato y no debería ser un problema para construir un JSON que camino). Alternativamente, hay otras maneras eficientes de manipular cadenas, como el método 'join':' "" .join (['{"', var_name, '":', value, '}']) ' – mgc

Cuestiones relacionadas