SIN · Sintaxis 7 · Archivos y errores

33.Manejo de excepciones

Atrapar los errores que ocurren mientras el programa se ejecuta para responder de forma controlada en lugar de que el programa se detenga.

¿Qué es?

Una excepción es un error que ocurre mientras el programa se ejecuta: el usuario escribió letras donde iba un número, se intentó dividir entre cero, el archivo no existe. Si nadie la atiende, el programa se detiene y muestra un mensaje en rojo.

Manejar una excepción es prever que puede pasar y decir qué hacer: mostrar un aviso claro, pedir el dato otra vez o usar un valor por defecto.

Es como el plan B de un evento al aire libre: si llueve (la excepción), ya sabes que todos se pasan al salón, en lugar de cancelar la fiesta.

Excepciones comunes

Excepción Cuándo ocurre
ValueError Un valor con el tipo correcto pero contenido inválido: int("hola")
TypeError Operación entre tipos incompatibles: "5" + 3
ZeroDivisionError División entre cero
IndexError Posición fuera de una lista
KeyError Clave que no existe en un diccionario
FileNotFoundError Archivo que no existe

Sintaxis (pseudocódigo / Python)

PSeInt: prevenir con validación

Algoritmo Dividir
	Definir a, b Como Real
	Escribir "Dividendo:"
	Leer a
	Escribir "Divisor:"
	Leer b
	Si b = 0 Entonces
		Escribir "No se puede dividir entre cero"
	SiNo
		Escribir "Resultado: ", a / b
	FinSi
FinAlgoritmo

Python: atrapar la excepción

try:
    a = float(input("Dividendo: "))
    b = float(input("Divisor: "))
    resultado = a / b
except ValueError:
    print("Escribe solo números")
except ZeroDivisionError:
    print("No se puede dividir entre cero")
else:
    print("Resultado:", resultado)       # solo si no hubo error
finally:
    print("Fin de la operación")         # siempre se ejecuta
Bloque Cuándo se ejecuta
try Siempre; aquí va el código que puede fallar
except Tipo Solo si ocurrió ese tipo de error
else Solo si no hubo error
finally Siempre, haya error o no (cerrar archivos, conexiones)

Lanzar una excepción propia

def registrar_edad(edad):
    if edad < 0 or edad > 120:
        raise ValueError(f"Edad fuera de rango: {edad}")
    return edad

try:
    registrar_edad(150)
except ValueError as error:
    print("Error:", error)

Ejemplo guiado

Problema: pedir un número entero al usuario hasta que escriba uno válido, sin que el programa se detenga.

def pedir_entero(mensaje, minimo, maximo):
    while True:
        texto = input(mensaje)
        try:
            numero = int(texto)
        except ValueError:
            print(f"«{texto}» no es un número entero, intenta de nuevo")
            continue
        if minimo <= numero <= maximo:
            return numero
        print(f"Debe estar entre {minimo} y {maximo}")

grupo = pedir_entero("Número de alumnos (1 a 50): ", 1, 50)
print("Alumnos registrados:", grupo)

Ejemplo de ejecución (con treinta, 80, 30):

Número de alumnos (1 a 50): treinta
«treinta» no es un número entero, intenta de nuevo
Número de alumnos (1 a 50): 80
Debe estar entre 1 y 50
Número de alumnos (1 a 50): 30
Alumnos registrados: 30

La función combina las dos estrategias: try/except para el error de conversión y un if para el rango.

Errores comunes

# ✗ Mala práctica: oculta cualquier error, incluso los de programación
try:
    resultado = 10 / int("5")
    print(resultado + "x")      # este error también queda escondido
except:
    print("Algo salió mal")

Buenas prácticas

  • Excepciones específicas, nunca except: solo.
  • Mensajes claros para el usuario: qué pasó y qué puede hacer.
  • Usa finally (o with) para liberar recursos.
  • Valida cuando sea sencillo y usa excepciones para lo que no puedes prever (archivos, red, datos externos).
  • Lanza ValueError en tus funciones cuando reciban datos inválidos, en lugar de devolver valores raros.

Material descargable

Aún no hay material descargable para este tema. Pronto habrá cuadernillos, manuales o laboratorios.

Referencias

© solutions_ · Fundamentos de programación · 33 Manejo de excepciones