str.format () löst KeyError aus

79

Der folgende Code löst eine KeyErrorAusnahme aus:

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))

Warum?

Ich benutze Python 3.1.

Dor
quelle
1
Sie könnten wahrscheinlich dieselbe Aufgabe mit einem Listenverständnis enumerateausführen (verwenden Sie , um die Unanständigkeiten zu erhalten).
SwiftsNamesake
Siehe auch (doppelt) stackoverflow.com/questions/35574349/…
dreftymac

Antworten:

140

Das Problem sind diejenigen {und }Zeichen, die Sie dort haben und die keinen Schlüssel für die Formatierung angeben. Sie müssen sie verdoppeln, also ändern Sie Ihren Code in:

addr_list_formatted.append("""
    "{0}"
    {{
    "gamedir"  "str"
    "address"  "{1}"
    }}
""".format(addr_list_idx, addr))
Lasse V. Karlsen
quelle
12
Was wäre, wenn jemand JSON in Python verwenden wollte?
Fijiaaron
4
@fijiaaron Das Doppelte {in der Antwort besteht nur darin, der formatMethode mitzuteilen , dass hier kein Schlüssel zum Formatieren vorhanden ist (daher werden sie in der formatierten Zeichenfolge maskiert und es sollte kein Problem sein, einen JSON auf diese Weise zu erstellen). Alternativ gibt es andere effiziente Möglichkeiten, um Strings zu manipulieren, wie die joinMethode:"".join(['{"', var_name, '":', value, '}'])
mgc
Ich hätte fast den Verstand verloren, bis ich herausgefunden hatte, was das Problem ist
Dmitry Kankalovich
1
@DmitryKankalovich Du hast den Verstand verloren, Stack Overflow und jeder hier ist nur eine Erfindung deiner Fantasie. (das sage ich mir zumindest immer wieder) :)
Lasse V. Karlsen