Python Language Evitare Eccezioni KeyError


Esempio

Un errore comune quando si utilizzano i dizionari è di accedere a una chiave inesistente. Ciò in genere KeyError un'eccezione KeyError

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

Un modo per evitare errori chiave consiste nell'utilizzare il metodo dict.get , che consente di specificare un valore predefinito da restituire nel caso di una chiave assente.

value = mydict.get(key, default_value)

Che restituisce mydict[key] se esiste, ma restituisce altrimenti default_value . Nota che questo non aggiunge la key a mydict . Quindi, se si desidera mantenere quella coppia chiave-valore, si dovrebbe utilizzare mydict.setdefault(key, default_value) , che non memorizzare la coppia chiave-valore.

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

Un modo alternativo per affrontare il problema è l'eccezione

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

Puoi anche controllare se la chiave è in dizionario.

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

Si noti, tuttavia, che negli ambienti a più thread è possibile che la chiave venga rimossa dal dizionario dopo il controllo, creando una condizione di competizione in cui è ancora possibile lanciare l'eccezione.

Un'altra opzione è usare una sottoclasse di dict, collections.defaultdict, che ha un default_factory per creare nuove voci nel dict quando viene dato un new_key.