Dans mon programme python, le message d'erreur suivant s'affiche:
KeyError: 'variablename'
A partir de ce code:
path = meta_entry['path'].strip('/'),
Quelqu'un peut-il s'il vous plaît expliquer pourquoi cela se produit?
Un KeyError
signifie généralement que la clé n'existe pas. Alors, êtes-vous sûr que la clé path
existe?
À partir de la documentation officielle python:
exception KeyError
Relevé lorsqu'une clé de mappage (dictionnaire) est introuvable dans l'ensemble de clés existantes.
Par exemple:
>>> mydict = {'a':'1','b':'2'}
>>> mydict['a']
'1'
>>> mydict['c']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'c'
>>>
Essayez donc d’imprimer le contenu de meta_entry
et vérifiez si path
existe ou non.
>>> mydict = {'a':'1','b':'2'}
>>> print mydict
{'a': '1', 'b': '2'}
Ou vous pouvez faire:
>>> 'a' in mydict
True
>>> 'c' in mydict
False
Je suis entièrement d'accord avec les commentaires d'erreur clé. Vous pouvez également utiliser la méthode du dictionnaire get () pour éviter les exceptions. Cela pourrait également être utilisé pour donner un chemin par défaut plutôt que None
comme indiqué ci-dessous.
>>> d = {"a":1, "b":2}
>>> x = d.get("A",None)
>>> print x
None
Pour le dict, utilisez simplement
if key in dict
et ne pas utiliser
if key in dict.keys()
Cela prendra du temps
Oui, cela est probablement dû à une clé non existante.
Dans mon programme, j'ai utilisé setdefault pour désactiver cette erreur, par souci d'efficacité. en fonction de l'efficacité de cette ligne
>>>'a' in mydict.keys()
Je suis nouveau sur Python aussi. En fait, je viens de l'apprendre aujourd'hui. Alors pardonnez-moi sur l'ignorance de l'efficacité.
Dans Python 3, vous pouvez également utiliser cette fonction,
get(key[, default]) [function doc][1]
On dit que cela ne soulèvera jamais une erreur clé.
Cela signifie que votre tableau manque de la clé que vous recherchez. Je gère cela avec une fonction qui renvoie la valeur si elle existe ou renvoie une valeur par défaut.
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')
Sortie:
1
2
#default
J'ai reçu cette erreur en analysant dict
avec imbriqué 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])
Traceback:
Traceback (most recent call last):
File "<input>", line 3, in <module>
KeyError: 'K'
Parce que dans la deuxième boucle devrait être cats[cat]
à la place juste cat
(ce qui est juste une clé)
Alors:
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])
Donne
black
10
white
8
Par exemple, s'il s'agit d'un nombre:
ouloulou={
1:US,
2:BR,
3:FR
}
ouloulou[1]()
Cela fonctionne parfaitement, mais si vous utilisez par exemple:
ouloulou[input("select 1 2 or 3"]()
ça ne marche pas, parce que votre chaîne de retour en entrée '1'. Donc, vous devez utiliser int ()
ouloulou[int(input("select 1 2 or 3"))]()