Bienvenidos sean a este post, hoy veremos algunas de las otras tecnicas mas utilizadas.
Perfilado
Cuando hablamos de perfilados en este post, dijimos que era una forma de poder medir los tiempos que utilizabamos para las distintas llamadas que trabajan dentro del codigo, entre ellas tenemos dos principales que son profile y cProfile, las cuales una media el tiempo de cada instruccion interna y la otra devolvia un valor estimado del procesamiento de todo el codigo, como dijimos y vimos en ese post nos daba un detalle de porque algunas veces nuestro codigo trabajaba de forma mas lenta de lo esperado, esto es especialmente util cuando trabajamos con informacion que viaje por la red donde los tiempos y las latencias del programa toman vital importancia sobre todo por el lugar donde debe trabajar y saber donde actuar cuando los problemas surjan, una buena practica es tener bien dominado el tema de los perfilados y una perspectiva de solucion de problemas que veremos en el proximo post.
Assertions
Las afirmaciones o assertions son una forma muy bonita de verificar que tus supuestos son ejecutados, es decir que si todo se ejecuta de forma correcta no tenemos ningun inconveniente pero si alguno falla tendremos alguna hermosa excepcion para trabajar con ella, algunas veces en lugar de inspeccionar el codigo es preferible utilizar un par de afirmaciones (assert) en el mismo para excluir algunas posibilidades, veamos el siguiente ejemplo donde primero crearemos un archivo al cual llamaremos afirmar.py y la agregaremos el siguiente codigo:
afirmar.py
miLista = [1, 2, 3]
assert 4 == len(miLista)
for valor in range(4):
print(miLista[valor])
En este codigo vamos a suponer que tenemos una lista no creada por nosotros sino recibida de alguna otra fuente con estos valores pero nosotros suponemos que posee cuatro valores por lo tanto creamos un bucle for donde contara hasta cuatro por medio de range y pasara por cada una de las posiciones de la lista pero nosotros queremos estar seguros de que esta funcionara, para ello agregamos la linea con el assert donde verifica si 4 es igual a la longitud de la lista, si la condicion se cumple el codigo sin mostrar ninguna notificacion de lo contrario se detendra devolviendo una excepcion, veamos que sucede:
tinchicus@dbn001vrt:~/lenguajes/python$ python3 afirmar.py
Traceback (most recent call last):
File "afirmar.py", line 2, in <module>
assert 4 == len(miLista)
AssertionError
tinchicus@dbn001vrt:~/lenguajes/python$
En este caso nos informa donde ocurrio el error, debido a que circunstancia y el tipo de excepcion, informando el tipo de falla que podemos tener en nuestro codigo, como pueden ver esta es una forma muy sencilla de poder verificar donde puede fallar nuestro codigo pero no es la mas correcta para codigos mas complejos o errores mas dificiles dado que no tenemos mucha informacion y trabaja mas con supuestos nuestros que los devuelto por algunos de los metodos de depuracion vistos anteriormente, por ultimo podemos verificar como funciona el assert si modificamos a miLista de la siguiente forma:
miLista = [1, 2, 3, 33]
En este caso ahora tenemos cuatro posiciones y por lo tanto el assert ahora debera cumplirse, probemos nuevamente para ver su conducta:
tinchicus@dbn001vrt:~/lenguajes/python$ python3 afirmar.py
1
2
3
33
tinchicus@dbn001vrt:~/lenguajes/python$
Como podemos ver ahora nuestro assert al ver que la condicion se cumplio paso de largo sin notificar ninguna excepcion y ejecutando el bloque con total seguridad sin ningun error pero esta logiica tiene un inconveniente solo funciona si miLista es igual a 4 pero si es mayor a este nos devolvera un error tambien porque no se cumple pero el bucle funcionaria perfectamente, con esto aclarado podemos decir que esta es una buena practica para cuando tenemos una sospecha donde puede fallar nuestro codigo.
Por ultimo en la documentacion oficial de python hay una seccion dedicada a la depuracion, tanto al framework bdb, como a los modulos faulthamdler, timeit, trace, tracemallock y obviamente pdb, la direccion es:
https://docs.python.org/3/library/debug.html
En resumen, hoy hemos visto dos tecnicas adicionales para trabajar con la depuracion, una fue la de perfilado que hemos visto en este post donde hablamos brevemente como nos puede ayudar para nuestras depuraciones, despues hablamos de las afirmaciones o assert las cuales sirven para hacer una verificacion rapida a traves de suposiciones nuestras en determinadas partes del codigo, 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.


Donación
Es para mantenimento del sitio, gracias!
$1.50
