Curso de Python avanzado

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.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.