
El módulo defaultdict y el manejo de excepciones de Python
Capítulo 6: Diccionarios por defecto - Excepciones controladas
En este capítulo aprenderás a manejar excepciones en los diccionarios cuando se llama a un elemento inexistente del mismo. Para ello importaremos el módulo collections y su subclase defaultdict.
Empecemos con un simple diccionario:
usuario = {
"ID" : 1,
"Nombre" : "Enrique",
"Apellidos" : "Barros Fernández",
"Edad" : 28
}
print(usuario["ID"])
print(usuario["Nombre"])
print(usuario["Apellidos"])
print(usuario["Edad"])
1
Enrique
Barros Fernández
28
Si ejecutamos esto, no hay ningún problema, ¿pero qué pasa cuándo se llama a un elemento que no existe que el diccionario?
print(usuario["Dirección"])
La respuesta es una excepción no controlada:
Traceback (most recent call last):
File "RUTA AL ARCHIVO", line X, in module
print(usuario["Dirección"])
KeyError: 'Dirección'
Para manejar este problema debes añadir la funcionalidad a tu programa de evitar estos errores e ignorarlos o bien ofrecer una alternativa en caso de que ocurran para que tu programa no "crashee" o falle hablando en español y se cierre abruptamente.
defaultdict de Python - Diccionarios por defecto
Tenemos una solución muy práctica, importar el módulo collections y en concreto, la subclase defaultdict.
¿Qué podemos hacer con defaultdict? podemos subministrar un valor por defecto que se cargará siempre que se llame al intentar acceder a un elemento de un diccionario y este no exista.
La sintaxis del diccionario en este caso cambia, deberás utilizar un constructor para crearlo:
from collections import defaultdict
def valor_defecto():
return "Ese elemento no existe en el diccionario."
usuario = defaultdict(valor_defecto)
usuario["ID"] = 1
usuario["Nombre"] = "Enrique"
usuario["Apellidos"] = "Barros Fernández"
usuario["Edad"] = 28
print(usuario["ID"])
print(usuario["Nombre"])
print(usuario["Apellidos"])
print(usuario["Edad"])
print(usuario["Dirección"])
Ahora en el print que provocaría un KeyError, tenemos un valor por defecto que dará en cada KeyError que hagamos (Ese elemento no existe en el diccionario).
1
Enrique
Barros Fernández
28
Ese elemento no existe en el diccionario.
Con esto, nos evitamos un "crash" del programa e informamos al usuario de su error.
Para terminar el capítulo, veamos una curiosidad, el tipo de dato que tiene este diccionario creado con el módulo collections:
print(type(usuario))
class 'collections.defaultdict'
Comentarios
Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.