Una excepción es un error producido por el código que ejecutamos, el cual interrumpe el flujo normal de un programa. El adecuado manejo de estas permite establecer un comportamiento definido en caso de que ocurra un error, permitiendo que el programa continúe (si es posible), logrando mayor robustez en la aplicación desarrollada.
Try y Except
La forma más básica de manejo de excepciones en Python se realiza mediante los bloques try
y except
.
try:
# Código que podría generar una excepción
x = int("texto")
except ValueError:
print("Ocurrió un error de valor.")
Múltiples excepciones
Es posible capturar múltiples excepciones especificando más bloques except
.
valor_texto = "siete"
try:
x = int(valor_texto) / 0
except ValueError:
print("Ocurrió un error de valor.")
except ZeroDivisionError:
print("Ocurrió una división por cero.")
También puedes capturar múltiples excepciones en el mismo bloque.
try:
x = 10 / 0
except (ValueError, ZeroDivisionError):
print("Ocurrió un error de valor o división por cero.")
En el caso que se deseen capturar todas las excepciones que puedan ocurrir, se puede utilizar directamente Exception
, aunque esto no es tan recomendado porque puede generar situaciones no contempladas:
try:
x = 10 / 0
except Exception:
print("Ocurrió un error.")
Capturar detalles de la excepción
Puedes capturar los detalles de la excepción para manejarla o mostrar un mensaje informativo.
try:
x = 10 / 0
except ZeroDivisionError as e:
print(f"Ocurrió una excepción: {e}")
Finally
El bloque finally
se ejecuta siempre, independientemente de si se produjo una excepción o no.
try:
x = 10 / 1
except ZeroDivisionError:
print("División por cero.")
finally:
print("Esto siempre se ejecuta.")
Else
El bloque else
se ejecuta solamente si no se produjo ninguna excepción en el bloque try
.
try:
x = 10 / 1
except ZeroDivisionError:
print("División por cero.")
else:
print("Todo funcionó correctamente.")
Excepciones personalizadas
Puedes definir excepciones personalizadas extendiendo la clase base Exception
.
class MiExcepcion(Exception):
pass
try:
raise MiExcepcion("Esto es una excepción personalizada")
except MiExcepcion as e:
print(f"Ocurrió una excepción: {e}")