web-dev-qa-db-fra.com

Je reçois une erreur de clé dans python

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?

167
David Liaw

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
225
RanRag

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
115
Adam Lewis

Pour le dict, utilisez simplement

if key in dict

et ne pas utiliser

if key in dict.keys()

Cela prendra du temps

26
keywind

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é.

5
Glenn Yu

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
3
Ben Sullins

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
2
pbaranski

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"))]()
0
lemoinemeddy