it-swarm.com.de

Ich erhalte einen Schlüsselfehler in python

In meinem python Programm erhalte ich diesen Fehler:

KeyError: 'variablename'

Aus diesem Code:

path = meta_entry['path'].strip('/'),

Kann jemand bitte erklären, warum dies geschieht?

167
David Liaw

Ein KeyError bedeutet im Allgemeinen, dass der Schlüssel nicht existiert. Sind Sie sicher, dass der Schlüssel path vorhanden ist?

Aus den offiziellen python Dokumenten:

Ausnahme KeyError

Wird ausgelöst, wenn im Satz der vorhandenen Schlüssel kein Zuordnungsschlüssel (Wörterbuchschlüssel) gefunden wird.

Zum Beispiel:

>>> mydict = {'a':'1','b':'2'}
>>> mydict['a']
'1'
>>> mydict['c']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'c'
>>>

Versuchen Sie also, den Inhalt von meta_entry zu drucken und prüfen Sie, ob path existiert oder nicht.

>>> mydict = {'a':'1','b':'2'}
>>> print mydict
{'a': '1', 'b': '2'}

Oder Sie können Folgendes tun:

>>> 'a' in mydict
True
>>> 'c' in mydict
False
225
RanRag

Ich stimme den Key Error-Kommentaren voll zu. Sie können auch die Methode dictionary's get () verwenden, um die Ausnahmen zu vermeiden. Dies kann auch verwendet werden, um einen Standardpfad anstelle von None anzugeben (siehe unten).

>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
115
Adam Lewis

Zum Diktieren einfach verwenden

if key in dict

und nicht verwenden

if key in dict.keys()

Es wird zeitaufwändig sein

26
keywind

Ja, es liegt höchstwahrscheinlich an einem nicht vorhandenen Schlüssel.

In meinem Programm habe ich setdefault verwendet, um diesen Fehler aus Gründen der Effizienz auszuschalten. je nachdem wie effizient diese leitung ist

>>>'a' in mydict.keys()  

Ich bin auch neu in Python. Tatsächlich habe ich es gerade heute gelernt. Verzeihen Sie mir die Unkenntnis der Effizienz.

In Python 3 können Sie auch diese Funktion verwenden,

get(key[, default]) [function doc][1]

Es wird gesagt, dass es niemals einen Schlüsselfehler auslösen wird.

5
Glenn Yu

Dies bedeutet, dass in Ihrem Array der gesuchte Schlüssel fehlt. Ich behandle dies mit einer Funktion, die entweder den Wert zurückgibt, wenn er existiert, oder stattdessen einen Standardwert zurückgibt.

def keyCheck(key, arr, default):
    if key in arr.keys():
        return arr[key]
    else:
        return default


myarray = {'key1':1, 'key2':2}

print keyCheck('key1', myarray, '#default')
print keyCheck('key2', myarray, '#default')
print keyCheck('key3', myarray, '#default')

Ausgabe:

1
2
#default
3
Ben Sullins

Ich habe diesen Fehler erhalten, als ich dict mit verschachteltem for analysiert habe:

cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
    for attr in cat:
        print(cats[cat][attr])

Zurück verfolgen:

Traceback (most recent call last):
      File "<input>", line 3, in <module>
    KeyError: 'K'

Denn in der zweiten Schleife sollte cats[cat] statt nur cat sein (was ist nur ein Schlüssel)

Damit:

cats = {'Tom': {'color': 'white', 'weight': 8}, 'Klakier': {'color': 'black', 'weight': 10}}
cat_attr = {}
for cat in cats:
    for attr in cats[cat]:
        print(cats[cat][attr])

Gibt

black
10
white
8
2
pbaranski

Wenn dies beispielsweise eine Zahl ist:

ouloulou={
    1:US,
    2:BR,
    3:FR
    }
ouloulou[1]()

Es funktioniert perfekt, aber wenn Sie zum Beispiel verwenden:

ouloulou[input("select 1 2 or 3"]()

es funktioniert nicht, weil Ihre Eingabe die Zeichenfolge '1' zurückgibt. Sie müssen also int () verwenden

ouloulou[int(input("select 1 2 or 3"))]()
0
lemoinemeddy