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.


1
Sie könnten wahrscheinlich dieselbe Aufgabe mit einem Listenverständnis enumerateausführen (verwenden Sie , um die Unanständigkeiten zu erhalten).
SwiftsNamesake

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.