Python Language Éviter les exceptions de KeyError


Exemple

Un écueil courant lors de l’utilisation des dictionnaires est d’accéder à une clé inexistante. Cela se traduit généralement par une exception KeyError

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

Un moyen d'éviter les erreurs de clé consiste à utiliser la méthode dict.get , qui vous permet de spécifier une valeur par défaut à renvoyer dans le cas d'une clé absente.

value = mydict.get(key, default_value)

Qui renvoie mydict[key] s'il existe, mais renvoie default_value . Notez que cela n'ajoute pas de key à mydict . Donc , si vous voulez conserver cette valeur paire de clés, vous devez utiliser mydict.setdefault(key, default_value) , qui ne stocke la paire de valeurs clés.

mydict = {}
print(mydict)
# {}
print(mydict.get("foo", "bar"))
# bar
print(mydict)
# {}
print(mydict.setdefault("foo", "bar"))
# bar
print(mydict)
# {'foo': 'bar'}

Une autre façon de faire face au problème est d’accepter l’exception

try:
    value = mydict[key]
except KeyError:
    value = default_value

Vous pouvez également vérifier si la clé est in le dictionnaire.

if key in mydict:
    value = mydict[key]
else:
    value = default_value

Notez toutefois que, dans les environnements multithread, la clé peut être supprimée du dictionnaire après vérification, créant ainsi une condition de concurrence où l'exception peut toujours être levée.

Une autre option consiste à utiliser une sous-classe de dict, collections.defaultdict, qui possède une propriété default_factory pour créer de nouvelles entrées dans le dict lorsqu'une nouvelle clé est donnée.