Nel mio programma Python ricevo questo errore:
KeyError: 'variablename'
Da questo codice:
path = meta_entry['path'].strip('/'),
Qualcuno può spiegare perché questo sta accadendo?
meta_entry
e assicurati che esista la chiave desiderata.
Nel mio programma Python ricevo questo errore:
KeyError: 'variablename'
Da questo codice:
path = meta_entry['path'].strip('/'),
Qualcuno può spiegare perché questo sta accadendo?
meta_entry
e assicurati che esista la chiave desiderata.
Risposte:
In KeyError
genere significa che la chiave non esiste. Quindi, sei sicuro che la path
chiave esista?
Dai documenti ufficiali di Python:
eccezione KeyError
Generato quando una chiave di mappatura (dizionario) non viene trovata nel set di chiavi esistenti.
Per esempio:
>>> mydict = {'a':'1','b':'2'}
>>> mydict['a']
'1'
>>> mydict['c']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'c'
>>>
Quindi, prova a stampare il contenuto di meta_entry
e controlla se path
esiste o no.
>>> mydict = {'a':'1','b':'2'}
>>> print mydict
{'a': '1', 'b': '2'}
Oppure puoi fare:
>>> 'a' in mydict
True
>>> 'c' in mydict
False
path = meta_entry['path'].strip('/'),
fa parte del tuo codice o del motore. Se fa parte del motore, temo che non si possa fare nulla.
print meta_entry
e controllare se contiene path
o meno.
Sono pienamente d'accordo con i commenti sull'errore chiave. È inoltre possibile utilizzare il metodo get () del dizionario per evitare le eccezioni. Questo potrebbe anche essere usato per fornire un percorso predefinito piuttosto che None
come mostrato di seguito.
>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
Sì, molto probabilmente è causato da una chiave inesistente.
Nel mio programma, ho usato setdefault per silenziare questo errore, per motivi di efficienza. a seconda di quanto sia efficiente questa linea
>>>'a' in mydict.keys()
Sono nuovo anche per Python. In effetti l'ho appena imparato oggi. Quindi perdonami per l'ignoranza dell'efficienza.
In Python 3, puoi anche usare questa funzione,
get(key[, default]) [function doc][1]
Si dice che non genererà mai un errore chiave.
Ciò significa che nell'array manca la chiave che stai cercando. Lo gestisco con una funzione che restituisce il valore se esiste o restituisce invece un valore predefinito.
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')
Produzione:
1
2
#default
Ho ricevuto questo errore durante l'analisi dict
con nidificato for
:
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])
Rintracciare:
Traceback (most recent call last):
File "<input>", line 3, in <module>
KeyError: 'K'
Perché nel secondo ciclo dovrebbe essere cats[cat]
invece solo cat
(ciò che è solo una chiave)
Così:
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])
dà
black
10
white
8
Ad esempio, se questo è un numero:
ouloulou={
1:US,
2:BR,
3:FR
}
ouloulou[1]()
Funziona perfettamente, ma se usi ad esempio:
ouloulou[input("select 1 2 or 3"]()
non funziona perché l'input restituisce la stringa '1'. Quindi devi usare int ()
ouloulou[int(input("select 1 2 or 3"))]()
Rendiamolo semplice se stai usando Python 3
mydict = {'a':'apple','b':'boy','c':'cat'}
check = 'c' in mydict
if check:
print('c key is present')
Se hai bisogno di altre condizioni
mydict = {'a':'apple','b':'boy','c':'cat'}
if 'c' in mydict:
print('key present')
else:
print('key not found')
Per il valore della chiave dinamica, puoi anche gestire il blocco try-exception
mydict = {'a':'apple','b':'boy','c':'cat'}
try:
print(mydict['c'])
except KeyError:
print('key value not found')mydict = {'a':'apple','b':'boy','c':'cat'}
Key error
generalmente significakey
che non esiste. Quindi, sei sicuro che esista un 'percorso'?