Diccionario

Excepción

Un error que ocurre mientras el programa se ejecuta (un archivo que no existe, una división entre cero) y que se puede capturar para reaccionar.

Cuando algo sale mal durante la ejecución, el lenguaje lanza una excepción. Si nadie la captura, el programa se detiene con un mensaje de error.

Con try y catch (o except en Python) envuelves el código que puede fallar y decides qué hacer: avisar al usuario, reintentar o guardar el error. Go y Rust no usan excepciones para estos casos: devuelven el error como un valor más.

Un ejemplo

Al abrir notas.txt, si el archivo no existe se lanza una excepción; con try/catch puedes mostrar «No encuentro el archivo» en lugar de que el programa se cierre.

Por qué importa

Las excepciones son el mecanismo para tratar lo que sale mal sin que el programa se caiga por completo: un archivo que no existe, una conexión que falla o un dato con formato incorrecto. En lugar de comprobar cada posible fallo a mano, capturas el error en un solo lugar y decides qué hacer: reintentar, avisar al usuario o registrarlo.

Si no se captura una excepción, sube por las funciones que llamaron a la actual hasta detener el programa y mostrar un traceback o traza de pila. Leerla de abajo arriba o de arriba abajo, según el lenguaje, te indica exactamente dónde se produjo el fallo.

Confusiones frecuentes

Un fallo habitual es capturar todas las excepciones con un bloque vacío, que oculta errores reales y hace que depurar sea muy difícil. Captura solo las que sepas tratar. Tampoco hay que usarlas para el flujo normal del programa: no es una forma elegante de salir de un bucle. Y no hay que confundir excepción con error de sintaxis: este último impide arrancar, mientras que la excepción ocurre durante la ejecución.

Preguntas frecuentes

¿Para qué sirve `finally`?

Contiene código que se ejecuta siempre, haya o no excepción, y se usa para liberar recursos como cerrar un archivo o una conexión.

¿Puedo lanzar mis propias excepciones?

Sí, con raise en Python o throw en JavaScript, Java y C#. Resulta útil para avisar de que una función ha recibido datos no válidos.