El manejo de errores en Python es clave para evitar que un programa termine de forma anticipada y para diseñar flujos de control robustos. Aquí aprenderás a usar la jerarquía de excepciones, a lanzar y capturar errores con intención, y a aplicar buenas prácticas que mejoran la calidad del código.
¿Por qué el manejo de errores en Python evita que tu programa termine?
Los errores en tiempo de ejecución son distintos a los de sintaxis: si hay un error de sintaxis, el programa ni siquiera corre. En cambio, con sintaxis correcta aún puedes fallar si ocurre una excepción en ejecución. Por eso, lanzar y capturar errores con una estrategia clara es esencial.
Excepciones vs. sintaxis: las excepciones ocurren en ejecución, la sintaxis se valida antes de correr.
Lanzar errores: se habla de throw y en Python se usa el keyword para “aventar un error”.
Jerarquía rica: todo parte de BaseException, lo que permite extender y crear errores propios.
Riesgo principal: si no manejas la excepción, el programa termina.
¿Cómo usar try, except, else y finally con estrategia?
La captura indiscriminada no es solución. Python promueve bloques try y except para modelar el flujo, pero con precisión: ser específicos con el tipo de error, evitar pass y preferir un solo enunciado dentro de try para aislar fallos.
Una estrategia clara: no encierres todo el programa en try.
Especificidad: evita capturar BaseException sin razón.
Nada de pass: no atrapes para ignorar, es mala práctica y común en GitHub o GitLab.
Un enunciado en try: reduces ambigüedad y manejas cada posible fallo con su excepción correcta.
¿Cuál es la sintaxis mínima de try y except?
Usa try para intentar una acción y except para manejar el error concreto que esperas.
# Ejemplo: división seguradefdivide(numerador, denominador):if denominador ==0:raise ZeroDivisionError("No se puede dividir entre cero.")return numerador / denominador
try: resultado = divide(10,0)except ZeroDivisionError:print("Operación inválida: denominador en cero.")
Idea clave: si esperas una división, captura solo ZeroDivisionError.
Beneficio: el flujo no termina y el usuario recibe un manejo claro.
¿Cuándo usar else y finally?
Python permite extender el flujo con else y finally para expresar intención: qué pasa si todo sale bien y qué se ejecuta siempre.
else: se ejecuta solo si no hubo error. Útil para distinguir éxito real.
finally: corre siempre. Ideal para liberar recursos como cerrar archivos.
¿Qué jerarquía de errores y ejemplos conviene conocer?
Python usa programación orientada a objetos para su sistema de excepciones. BaseException es la raíz y de ahí derivan errores comunes: EndOfFileError, ImportError, FileNotFoundError, FileExistsError, y ZeroDivisionError, entre otros. Conocerlos te ayuda a ser específico al capturar.
BaseException: raíz de la jerarquía; permite extender con errores propios.
ImportError: cuando un módulo no existe o falla al importarse.
FileNotFoundError / FileExistsError: operaciones de archivo con rutas inexistentes o colisiones de creación.
ZeroDivisionError: división entre cero.
También es buena práctica definir errores específicos de tu aplicación y extender la jerarquía cuando encaja con tu problema.
# Excepción de dominio propiaclassAppError(BaseException):pass# Uso en flujo de negocioifnot condiciones_validas:raise AppError("Reglas de negocio incumplidas.")
Ventaja: expresividad y trazas más claras.
Mantenimiento: facilita pruebas y lectura del código.
¿Has visto errores interesantes en la jerarquía de Python o definidos en algún sistema? Comparte ejemplos y cómo se adaptan a las necesidades del programa que conoces.
try: significa que se ejecuta este código. Si es posible, solo ponemos una sola línea de código ahí como buena práctica
except: es nuestro manejo del error, es lo que haremos si ocurre el error. Debemos ser específicos con el tipo de error que vamos a atrapar.
else: Es código que se ejecuta cuando no ocurre ningún error.
finally: Nos permite obtener un bloque de código que se va a ejecutar sin importar lo que pase.
Cuando usemos Try: La buena práctica es usar una sola línea de código.
Except:
Ejecuta esté código cuando hay una excepción.
Else: No exceptions? ejecuta esto
De hecho algo que te solicitan como programador de Python suelen solicitar que uses excepciones.
Palabras reservadas para manejar un error o excepciones en Python:
try: Permite que un bloque de codigo busque errores
.
except: Bloque que permite manejar el error
.
finally: Bloque que permite ejecutar codigo, independientemente del resultado de los bloques try y except
.
IMPORTANTE Para manejar el error debemos conocer el tipo de error que genera o que generara al momento de ejecutarlo
.
Como conocer el error que genera un codigo: Para hacer saber a la otra persona o a nosotros mismo que tipo de error esta generando el programa podemos hacerlo de igual forma como vemos el tipo de dato que estamos manejando puesto que recuerda que todo en python es un objeto, entonces en este caso pudiesemos aplicar lo siguiente:
Ejemplo:
try: c =int(input("Ingrese un valor: ")) c /0except Exceptionasc: #Con esto estamos evaluando la variable para la excepcion
print(type(c)._name)--->Con esto podemos saber el tipo de el error y el nombre del mismo
#ZeroDivisionError---De esta forma, estaria evaluando el error, por que por ejemplo si le pasamos una cadena de texto, entonces el resultado sera un ValueError
IMPORTANTE Tambien podemos poner otras declaraciones de except, para hacer multiples excepciones dentro de una misma declaracion
Siguiendo la buena práctica de manejar apenas una línea de error en el try, si en un bloque de código tengo varias instrucciones que pueden generar error ¿Debería anidarlos en los try-else?
y como arreglar los errores de mi vida ? alguien de aqui quieres ser mi socio cofundador quiero construir una red social ?
(va sin acentos)
Consulta: muchas veces podemos manejar los errores a traves de un if siempre que conozcamos los posibles errores, por ejemplo, division entre cero, apuntador nulo, etc.
Es mejor manejarlo con IF siempre que se pueda antes que con TRY, o deberiamos dejarle todo al manejador de excepciones?? que se recomienda?
Hola, es una buena práctica implementar excepciones para hacer catch de un error específico y dar un mensaje o ejecutar una función.
¡Hola @agobbi! Personalmente trato de capturar siempre los errores con un if, ya que permite una mayor organización del código para los errores pequeños. Si hay un error que no puedo captar con un if statement, usaría sin dudas try/catch
Los errores deben ser manejados de manera estrátégica.
Jerarquía de errores:
try: Ejecuta este código
except: Ejecuta este código cuando hay una excepción
else: ¿No hay excepciones? Ejecuta este código
finally: Siempre ejecuta este código
Atrapamos los errores para que sean controlados.
A la hora de atrapar un error, tambien necesitamos generar una estrategia, debido a que esa parte en especifico de nuestro programa no puede parar, de esa forma hacemos un try catch que en Python seria mejor dicho como un try: except (error) as error:para hacer una incorporacion en caso de que falle.