El tratamiento de excepciones en Python permite manejar errores de forma controlada durante la ejecución de un programa, en lugar de interrumpir abruptamente su funcionamiento. Esto se logra mediante bloques como try, except, else, finally que permiten capturar y manejar excepciones (errores) de manera flexible.
Ejemplos comunes de excepciones incluyen:
try:
# Código que podría generar una excepción
resultado = 10 / 0
except ZeroDivisionError:
# Código que se ejecuta si ocurre una excepción del tipo ZeroDivisionError
print("Error: No se puede dividir por cero.")
Puedes manejar diferentes tipos de excepciones usando varios bloques except o capturar varias excepciones en uno solo.
try:
numero = int(input("Introduce un número: "))
resultado = 10 / numero
except ZeroDivisionError:
print("Error: División por cero.")
except ValueError:
print("Error: Debes ingresar un número válido.")
try:
archivo = open("datos.txt", "r")
contenido = archivo.read()
except FileNotFoundError:
print("Error: El archivo no se encontró.")
else:
print("Archivo leído exitosamente.")
finally:
archivo.close() # Siempre se ejecuta, incluso si ocurre un error
Puedes generar excepciones manualmente usando la palabra clave raise. Esto es útil para validar condiciones específicas.
def validar_edad(edad):
if edad < 0:
raise ValueError("La edad no puede ser negativa.")
else:
print("Edad válida.")
try:
validar_edad(-5)
except ValueError as e:
print(f"Error: {e}")
Aquí, raise genera una excepción ValueError si se detecta una edad negativa, la cual es manejada en el bloque try-except.
También puedes crear tus propias excepciones heredando de la clase Exception.
class MiExcepcionPersonal(Exception):
pass
try:
raise MiExcepcionPersonal("Este es un error personalizado.")
except MiExcepcionPersonal as e:
print(f"Se ha capturado una excepción personalizada: {e}")
Nota: pass = «ya lo haré luego». El control de flujo en Python utiliza estructuras como if, for, while, etc., para dirigir la ejecución del programa según ciertas condiciones. La palabra clave pass es útil cuando necesitas escribir un bloque de código que aún no deseas implementar, pero no puedes dejar el bloque vacío, ya que causaría un error de sintaxis.
def procesar_datos(dato):
if dato == "A":
print("Dato A procesado.")
elif dato == "B":
pass # Aún no procesamos los datos B, pero evitamos un error
else:
print("Dato no reconocido.")
# Llamamos a la función
procesar_datos("A") # Output: Dato A procesado.
procesar_datos("B") # No hace nada, ya que se usa 'pass'
procesar_datos("C") # Output: Dato no reconocido.