Python Language Evitar las excepciones de KeyError


Ejemplo

Un error común cuando se usan diccionarios es acceder a una clave que no existe. Esto generalmente resulta en una excepción KeyError

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

Una forma de evitar errores clave es utilizar el método dict.get , que le permite especificar un valor predeterminado para devolver en el caso de una clave ausente.

value = mydict.get(key, default_value)

Lo que devuelve mydict[key] si existe, pero de lo contrario devuelve default_value . Tenga en cuenta que esto no agrega key a mydict . Así que si desea conservar ese par de valores clave, se debe utilizar mydict.setdefault(key, default_value) , lo que almacenar el par de valores clave.

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

Una forma alternativa de lidiar con el problema es atrapar la excepción.

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

También puede comprobar si la clave está in el diccionario.

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

Sin embargo, tenga en cuenta que, en entornos de subprocesos múltiples, es posible que la clave se elimine del diccionario después de la verificación, creando una condición de carrera en la que aún se puede lanzar la excepción.

Otra opción es usar una subclase de dict, collections.defaultdict, que tiene un default_factory para crear nuevas entradas en el dict cuando se le da una new_key.