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.
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
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
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
¿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.
¿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.
Número no válido
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
trycontiene la operación que puede fallar.except ValueErrorresponde a un tipo concreto de fallo.- No necesitas capturar errores que todavía no sabes resolver.
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.