El control de excepciones permite manejar errores sin que el programa se detenga de forma inesperada.
Python usa las palabras clave:
tryexceptelsefinallyraise
1. try – except
Se usa para capturar errores y evitar que el programa se bloquee.
try:
numero = int(input("Introduce un número: "))
print("Has introducido:", numero)
except ValueError:
print("Error: debes introducir un número válido.")
2. Capturar múltiples excepciones
try:
resultado = 10 / int(input("Divisor: "))
except ZeroDivisionError:
print("No se puede dividir entre cero.")
except ValueError:
print("Debes introducir un número.")
3. else
Se ejecuta solo si no hubo errores.
try:
n = int(input("Número: "))
except ValueError:
print("Entrada inválida.")
else:
print("Todo correcto, el número es", n)
4. finally
Se ejecuta siempre, haya error o no. Ideal para cerrar archivos, conexiones, etc.
try:
f = open("datos.txt")
contenido = f.read()
except FileNotFoundError:
print("Archivo no encontrado.")
finally:
print("Fin del proceso.")
5. Lanzar excepciones con raise
def dividir(a, b):
if b == 0:
raise ValueError("El divisor no puede ser cero.")
return a / b
ACTIVIDAD PRÁCTICA: “Validador de datos de usuario”
Objetivo: que tus alumnos aprendan a validar entradas y manejar errores de forma profesional.
Enunciado
Crea un programa que pida al usuario:
Su edad
Su email
Su número de teléfono
El programa debe:
Validar que la edad es un número entero entre 1 y 120.
Validar que el email contiene
"@"y".".Validar que el teléfono contiene solo dígitos y tiene entre 9 y 12 caracteres.
Mostrar un mensaje final indicando si los datos son válidos.
Usar try/except para capturar errores.
Usar raise para lanzar excepciones personalizadas.
Solución propuesta
def validar_edad(edad):
try:
edad = int(edad)
if edad < 1 or edad > 120:
raise ValueError("La edad debe estar entre 1 y 120.")
return edad
except ValueError:
raise ValueError("Edad inválida. Debes introducir un número entero.")
def validar_email(email):
if "@" not in email or "." not in email:
raise ValueError("Email inválido.")
return email
def validar_telefono(tel):
if not tel.isdigit():
raise ValueError("El teléfono solo debe contener números.")
if len(tel) < 9 or len(tel) > 12:
raise ValueError("El teléfono debe tener entre 9 y 12 dígitos.")
return tel
# Programa principal
try:
edad = validar_edad(input("Introduce tu edad: "))
email = validar_email(input("Introduce tu email: "))
telefono = validar_telefono(input("Introduce tu teléfono: "))
except ValueError as e:
print("Error:", e)
else:
print("\nDatos correctos:")
print("Edad:", edad)
print("Email:", email)
print("Teléfono:", telefono)
finally:
print("\nProceso finalizado.")
Ejemplo de salida
Introduce tu edad: 17
Introduce tu email: usuario@mail.com
Introduce tu teléfono: 612345678
Datos correctos:
Edad: 17
Email: usuario@mail.com
Teléfono: 612345678
Proceso finalizado.