Diccionarios por defecto - Excepciones controladas - Python avanzado - Capítulo 6


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:

Código

usuario = {
    "ID" : 1,
    "Nombre" : "Enrique",
    "Apellidos" : "Barros Fernández",
    "Edad" : 28
}

print(usuario["ID"])
print(usuario["Nombre"])
print(usuario["Apellidos"])
print(usuario["Edad"])

Resultado

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?

Código

print(usuario["Dirección"])

Resultado

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.

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:

Código

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"])

Resultado

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, dos pájaros de un tiro.

Para terminar el capítulo, veamos una curiosidad, el tipo de dato que tiene este diccionario creado con el módulo collections:

Código

print(type(usuario))

Resultado

class 'collections.defaultdict'

Suscríbete a mi canal de YouTube para apoyarme

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.


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.