El manejo de excepciones es una parte fundamental de la programación para hacer que tu código sea más robusto y fácil de mantener. En Python, puedes usar bloques try-except
para capturar y manejar errores. Aquí te explico los puntos más importantes para que aprendas a usar correctamente las excepciones.
Siempre debes capturar errores específicos, en lugar de usar un bloque genérico como except:
. Esto puede ocultar errores importantes y hacer que el programa continúe en un estado inesperado. Por ejemplo, si solo capturas una excepción general, podrías estar ignorando fallos graves en tu código, lo que dificultaría encontrar el problema.
Incorrecto:
try:
resultado = 10 / 0
except:
print("*ERROR* Algo salió mal.")
En este ejemplo, cualquier error, no solo la división por cero, sería capturado y el mensaje no te daría información suficiente.
Correcto:
try:
resultado = 10 / 0
except ZeroDivisionError:
print("*ERROR* No se puede dividir por cero.")
Aquí, solo capturamos un error específico, lo que nos permite dar un mensaje claro y preciso.
Puedes manejar múltiples tipos de errores en una sola línea usando una tupla. Esto es útil cuando sabes que pueden ocurrir varios tipos de errores y quieres manejarlos de la misma forma.
Ejemplo:
try:
resultado = float(input("Introduce un número: ")) / 0
except (ZeroDivisionError, ValueError) as e:
print(f"*ERROR* {e}")
En este ejemplo, capturamos tanto el error de división por cero como el error de valor incorrecto en la entrada de una sola vez.
A veces, querrás lanzar tus propias excepciones cuando ocurra una condición específica en tu programa. Para esto se utiliza la instrucción raise
. Puedes lanzar excepciones integradas como ValueError
o crear tus propias excepciones.
Ejemplo con raise
:
def validar_edad(edad):
if edad < 0:
raise ValueError("La edad no puede ser negativa.")
elif edad > 120:
raise ValueError("La edad no puede ser mayor a 120.")
return edad
try:
validar_edad(-5)
except ValueError as e:
print(e)
En este caso, lanzamos un ValueError
si la edad es inválida, y luego lo capturamos con un bloque try-except
.
El bloque else
se ejecuta solo si no ocurre ninguna excepción. Esto es útil para ejecutar código solo cuando todo ha ido bien y no se ha lanzado ningún error.
Ejemplo:
try:
resultado = 10 / 2
except ZeroDivisionError:
print("Error en la división.")
else:
print(f"El resultado es: {resultado}")
Si no ocurre ningún error en la división, el bloque else
imprimirá el resultado de la operación.
El bloque finally
siempre se ejecuta, independientemente de si ocurrió una excepción o no. Esto es útil para liberar recursos o asegurarte de que algo ocurra, como cerrar un archivo o desconectar una base de datos.
Ejemplo con finally
:
def dividir(num1, num2):
try:
resultado = num1 / num2
return resultado
except ZeroDivisionError:
print("*ERROR* No se puede dividir por cero.")
finally:
print("Operación finalizada.")
En este caso, el bloque finally
se ejecutará siempre, incluso si hay un error en la división, lo que puede ser útil para tareas de limpieza.
El manejo adecuado de excepciones te permitirá escribir código más robusto y seguro. Recuerda siempre:
- Capturar excepciones específicas.
- Usar
else
para separar el código de éxito del manejo de errores. - Usar
raise
para lanzar tus propias excepciones cuando sea necesario. - Usar
finally
para liberar recursos o realizar tareas críticas.
Al seguir estas prácticas, tus programas serán más fáciles de mantener y menos propensos a fallos inesperados.