En la ejecución de un programa, es común que se presenten situaciones inesperadas, como dividir entre cero, acceder a un archivo que no existe o intentar convertir texto a número sin éxito. Para manejar estos eventos sin que el programa se detenga abruptamente, Python ofrece un mecanismo llamado excepciones.
Una excepción es un tipo especial de objeto que indica que ha ocurrido un error o una condición anómala durante la ejecución de un programa. Si no se maneja adecuadamente, la excepción detiene el programa y muestra un mensaje de error.
Las excepciones no son exclusivas de Python. De hecho, la mayoría de los lenguajes modernos de programación cuentan con mecanismos similares para el control de errores.
Python proporciona un bloque de control denominado
try-except, que permite capturar y manejar excepciones. Esto es fundamental
para evitar que los errores detengan la ejecución completa de un programa.
a = 10
b = 0
try:
resultado = a / b
except ZeroDivisionError:
print("No se puede dividir entre cero.")
En este caso, si se produce una división entre cero, el flujo
del programa pasa automáticamente al bloque except, evitando el cierre
inesperado del programa.
Algunas excepciones frecuentes que puedes encontrar en Python incluyen:
ZeroDivisionError: cuando se intenta dividir
entre cero.TypeError: al realizar operaciones entre tipos
incompatibles (como sumar un número y una cadena).ValueError: al convertir una cadena que no
representa un número a tipo int o float.IndexError: al acceder a un índice fuera del
rango de una lista.FileNotFoundError: al intentar abrir un
archivo que no existe.KeyError: al intentar acceder a una clave que
no está presente en un diccionario.try:
resultado = "texto" + 5
except TypeError:
print("No se pueden sumar una cadena y un número.")
Python permite lanzar nuestras propias excepciones utilizando la
instrucción raise.
Esto puede ser útil para validar condiciones específicas en nuestros programas.
numero = -5
if numero < 0:
raise ValueError("El número no puede ser negativo.")
También puedes lanzar excepciones predefinidas como
NameError, o incluso definir tus propias excepciones personalizadas (veremos
esto más adelante).
Python permite usar bloques adicionales dentro de la estructura
try-except:
else: se ejecuta si no ocurre ninguna
excepción.finally: se ejecuta siempre, ocurra o no
ocurra una excepción.try:
numero = int(input("Introduce un número: "))
resultado = 10 / numero
except ZeroDivisionError:
print("Error: no se puede dividir entre cero.")
except ValueError:
print("Error: debes introducir un número válido.")
else:
print("El resultado es:", resultado)
finally:
print("Fin del proceso.")
¿Cuándo usar finally? Este bloque
es ideal para liberar recursos, cerrar archivos o realizar tareas de limpieza que deben
ejecutarse sin importar si ocurrió un error.
Puedes capturar varias excepciones en bloques separados o en uno solo, agrupándolas entre paréntesis:
try:
# código que puede fallar
except (ValueError, TypeError) as e:
print(f"Ocurrió un error: {e}")
Si no estás seguro de qué tipo de error puede ocurrir, puedes
capturar la excepción base Exception, aunque esto debe usarse con
precaución, ya que podría ocultar errores que deberían resolverse
explícitamente.
try:
# código que puede fallar
except Exception as e:
print(f"Se produjo un error inesperado: {e}")
try:
archivo = open("datos.txt", "r")
contenido = archivo.read()
except FileNotFoundError:
print("El archivo no existe.")
else:
print("Contenido del archivo:", contenido)
finally:
if 'archivo' in locals():
archivo.close()
try-except como
sustituto de validaciones lógicas.