Anuncios

Bienvenidos sean a este post, hoy veremos como trabajar con el rastreo o traceback.

Anuncios

Sobre este tema ya hablamos brevemente cuando hablamos de excepciones y vimos sobre la descripcion que nos proveen, es decir que esto nos da la posibilidad de saber bien que fue mal con nuestro codigo, volvamos a ver este tema con un simple codigo de ejemplo:

>>> d = {'alguna':'clave'}
>>> clave = 'alguna-otra'
>>> print(d[clave])
Anuncios

Aqui creamos un diccionario con una clave llamada alguna, luego establecemos una variable llamada clave con otro valor, por ultimo mostramos el valor de diccionario en base a la nueva clave, se imaginan que sucedera?, veamos:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'alguna-otra'
>>>
Anuncios

En este caso nos devolvio el error de clave (KeyError) porque no encontro la misma en el diccionario, nos dijo el nombre del archivo como en este caso lo hicimos a traves del interprete nos devuelve stdin y donde se genero el error, vamos a analizarlo mas a fondo por medio de otro ejemplo, para ello crearemos un archivo que llamaremos rastreador.py y le agregaremos el siguiente codigo:

rastreador.py

class ValidadorDeError(Exception):
	"""Se inicia cuando al acceder a resultados de un dict da un error"""

d = {'alguna' : 'clave'}
clave_mandatoria = 'alguna-otra'
try:
	print(d[clave_mandatoria])
except KeyError as err:
	raise ValidadorDeError(f"'{clave_mandatoria}' no encontrado en d."
		) from err
Anuncios
Anuncios

Primero crearemos una clase para poder manejar una excepcion, tal como vimos en este post, en esta funcion simplemente documentamos un valor para saber que hace, lo siguiente sera un diccionario donde generamos una clave similar a la vista en el ejemplo anterior, luego creamos una nueva clave, lo siguiente sera un bloque try/except donde le pediremos que muestre el valor de diccionario en base a la nueva clave, en el bloque de except le pasamos el tipo de KeyError a monitorear y lo almacenamos en el objeto err, por ultimo en este bloque usaremos un raise para utilizar la clase que generamos al comienzo y le pasaremos un mensaje donde pasaremos la clave que informamos y que no fue encontrada en el diccionario, desde el objeto que generamos en este bloque, probemos para ver su salida:

Traceback (most recent call last):
  File "rastreador.py", line 7, in <module>
    print(d[clave_mandatoria])
KeyError: 'alguna-otra'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "rastreador.py", line 10, in <module>
    ) from err
__main__.ValidadorDeError: 'alguna-otra' no encontrado en d.
Anuncios

En este caso primero vemos la tipica notificacion de nuestro error, despues vemos que nos indica que la excepcion anterior fue una causa directa de la excepcion que se comenta en la segunda parte, donde ahora nos dice cual es la clase que devuelve un error y la notificacion que pusimos para mostrarnos cual es el origen de nuestra excepcion, pero afortunadamente si se necesita trabajar mas especificamente con el rastreo o traceback existe un paquete llamado Traceback aunque no hablaremos sobre este modulo en el post.

Anuncios

En resumen, hoy hemos visto un poco mas sobre el mensaje de la excepcion, en este caso hablamos sobre que es el rastreo, hemos repasado como manejar excepciones por medio de clases, luego hemos visto como iniciar una excepcion por medio de esta clase pero utilizando el raise…from para poder ver mas especificamente de donde es el error, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50