Lección 22 de 45 · Errores y archivos

Excepciones con try y except

Aprende a recuperar el control cuando una operación puede fallar, sin esconder errores que todavía no sabes manejar.

Errores previsiblesDiagnóstico de fallosRecuperar el control
Índice · Lección 22/45
Un error no siempre significa que el programa deba terminar

Imagina que pides una edad y alguien escribe veinte. int("veinte") no puede producir un entero y Python lanza una excepción.

Cuando ese fallo es previsible, puedes decidir cómo responder: mostrar un mensaje, pedir otro dato o usar una alternativa. Para eso existen try y except.

Evidencia de aprendizaje

Identificar la operación que puede fallar y capturar únicamente la excepción de la que sabes recuperarte.

Primero identifica la línea que realmente puede fallar

Una conversión arriesgada
texto = "veinte"
# int(texto)  # produciría ValueError

El problema no está en guardar "veinte"; aparece al intentar convertirlo. Esa observación te ayuda a mantener el bloque try pequeño.

Cuanto menos código metas dentro de try, más fácil será saber qué operación estabas intentando proteger.

try intenta; except prepara un plan alternativo

Recuperarse de un dato no numérico
texto = "veinte"

try:
    edad = int(texto)
    print(f"Edad: {edad}")
except ValueError:
    print("Escribe la edad con cifras")

Si la conversión funciona, Python continúa dentro de try. Si produce ValueError, salta al bloque except ValueError.

La excepción deja de ser una sorpresa sin contexto: el programa reconoce un problema concreto y responde de una forma que el usuario puede entender.

Capturar una excepción concreta mantiene visibles los problemas nuevos

Podrías escribir except Exception: y capturar muchísimas cosas, pero eso suele ser demasiado amplio. Si mañana cometes otro error dentro del bloque, podrías ocultarlo detrás del mismo mensaje.

Pregunta útil antes de escribir except: «¿qué fallo espero exactamente y sé cómo recuperarme de él?». Si no puedes responder, quizá todavía no debas capturarlo.

Para después: else en try/except

else puede separar el camino de éxito del código protegido, pero no lo necesitas para construir el modelo básico. Primero domina: operación arriesgada pequeña → excepción concreta → recuperación.

Primero nombra el fallo que esperas

Paso 1

¿Qué línea puede fallar?

texto = "doce"
edad = int(texto)
print(edad)
Comprobar razonamiento

int(texto). Guardar el string no falla; la conversión es la operación arriesgada.

Paso 2

¿Qué excepción esperas?

int("doce") no puede convertir el texto a entero.

Comprobar razonamiento

ValueError. Esa es la excepción concreta que sabes manejar.

Haz pequeño el manejo del error: captura solo ValueError y devuelve un mensaje específico.

Salida esperada
Número no válido
excepcion.py
La salida aparecerá aquí.

Necesito una pista
  • La conversión de “doce” falla con ValueError.
  • No necesitas capturar todos los errores posibles.
Ver una solución razonada
def convertir(texto):
    try:
        return int(texto)
    except ValueError:
        return "Número no válido"

print(convertir("doce"))

Cuando el programa «sigue funcionando» pero ya no sabes por qué

Un except demasiado amplio puede convertir un error de programación en un mensaje aparentemente normal. Eso dificulta muchísimo depurar.

No midas el éxito por «no se ha cerrado». Mídelo por «he manejado exactamente el problema que esperaba».

Avanza cuando puedas nombrar el fallo que estás manejando

  • try contiene la operación que puede fallar.
  • except ValueError responde a un tipo concreto de fallo.
  • No necesitas capturar errores que todavía no sabes resolver.
Siguiente paso

Hasta ahora has reaccionado a errores que Python genera. En la próxima lección aprenderás a lanzar tú mismo una excepción cuando se incumpla una regla de tu programa.