Aprovechando los errores en python
En esta semana han ocurrido varias cosas en relación a python su lanzamiento saturó internet dejando inaccesible a tres de las principales redes sociales.. bueno eso no es verdad pero hay un hecho que sí es cierto y es que python este lunes oficialmente salió su release 3.10 Ver Figura 1 para uso de la comunidad y trae consigo grandes features, en este artículo me centraré en hablar del cambio relacionado con el manejo de errores
Pyenv
Antes de iniciar, para poder instalar python 3.10 de manera sencilla y para no ir a generar un caos en su SO recomendare la siguiente herramienta llamada pyenv, si han trabajando en node sería el equivalente a nvm el cual facilmente permite instalar python 3.10, para instalarlo en linux
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
para instalar python 3.10 simplemente ejecutamos el siguiente comando
pyenv install 3.10.0
para ver las versiones instaladas
pyenv --versions
por defecto estará seleccionada python 3.10 y con esta herramienta ya pueden empezar a probar el nuevo release sin generar problemas con las demás versiones
Errores en python < 3.10
En el tratamiento de errores en la versiones de python inferiores a la 3.10 tenemos algunos pequeños problemitas de hecho uno de los autores de uno de los libros más leídos sobre python dio su visto bueno sobre este cambio Ver Figura 2
y claro como no si el siguiente error es muy común encontrarlo
SyntaxError: unexpected EOF while parsing
un ejemplo de error en la sintaxis visto en la versión 3.9 vs la versión 3.10 con el mismo código
def show(data:dict):
print(data)
show({"age":20"name":"Jhon"})
ejecuto con python 3.9 y luego con python 3.10
El cambio es bastante impactante debido a que en el segundo resultado se tiene una sugerencia lo cual es una gran ayuda tanto para los que inician en python como para las personas que deben revisar logs, la verdad es que el 'Did you mean' me ha encantado, veamos otro ejemplo
class Helper:
@staticmetho
def get_base_url():
return "https://jairoandres.com"
ejecuto el codigo con python 3.9 y luego python 3.10 y este es el resultado
También funciona con clases
class Person:
def __init__(self, name:str, age:int) -> None:
self.name = name
self.age = age
person = Person("Jhon",25)
print(person.ag)
ejecuto en python 3.9 y python 3.10
los errores sintácticos en python no son muy amigables de corregir, como todo programador o programadora la primera acción que hacen es acudir a google y generalmente esto nos lleva a stackoverflow, este error es muy genérico, si se lleva algún tiempo ya trabajando con python se podría deducir un error de sintaxis, pero el debug para encontrar dónde está el error en proyectos grandes se vuelve tedioso, por ello se agregó esta mejora que se aprecia a continuación
person = {"age":20,"name":"Jhon"
Ejecutó en python 3.9 y python 3.10
para finalizar podemos ver como funciona también con módulos de python que puede ser una gran ayuda ya que incluso muchas veces los editores no se configuran para acceder a los entornos virtuales lo que no permite saber que librerias estan instaladas
from datetime import date
print(data.now())
se ejecuta con python 3.9 y python 3.10
Aprovechar Generando informes
Eventualmente se podrá capturar errores utilizando python 3.10 y generando html con estos errores, por ejemplo la librería rich permite generar html a partir de errores tipo informes como se aprecia a continuación
from rich.console import Console
from main import Person
console = Console(record=True)
def save_html(html_doc:str):
with open("error.html", mode="w") as file:
file.write(html_doc)
def generate_error():
try:
person = Person("Jhon", 25)
console.print(person.ag)
except Exception:
console.print_exception(show_locals=True)
html_doc = console.export_html()
save_html(html_doc)
generate_error()
el html generado se aprecia a continuación
eventualmente con python 3.10 se podría generar un mejor informe más o menos como el siguiente ejemplo modificado
Conclusiones
Los errores juegan un papel fundamental a lo largo de un ciclo de vida del desarrollo de software, cuando se está en ambientes devs estos nuevos mensajes ayudarán a mejorar el debug sumado con el typing seguro los tiempos se reducirán bastante, es importante esperar aún hasta que se estabilice las librerias y demas tools con la nueva versión antes de lanzarse al cambio de python 3.10, otra características que realmente me ha gustado es el pattern matching pero ese será para hablarlo en otro post