Control de excepciones

 El control de excepciones permite manejar errores sin que el programa se detenga de forma inesperada.

Python usa las palabras clave:

  • try

  • except

  • else

  • finally

  • raise

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:

  1. Validar que la edad es un número entero entre 1 y 120.

  2. Validar que el email contiene "@" y ".".

  3. Validar que el teléfono contiene solo dígitos y tiene entre 9 y 12 caracteres.

  4. Mostrar un mensaje final indicando si los datos son válidos.

  5. Usar try/except para capturar errores.

  6. 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.