Desde los inicios de los lenguajes de programación, la gestión de errores ha sido uno de los asuntos más difíciles. Es tan complicado diseñar un buen esquema de gestión de errores, que muchos lenguajes simplemente lo ignoran, delegando el problema en los diseñadores de librerías, que aportan soluciones a medias que pueden funcionar en muchas situaciones, pero que se pueden eludir fácilmente, normalmente con sólo ignorarlas. El problema más importante de la mayoría de los esquemas de gestión de errores es que dependen de que el programador se preocupe de seguir un convenio acordado que el lenguaje no obliga a cumplir. Si los programadores no se preocupan, cosa que ocurre a menudo cuando se tiene prisa, esos esquemas se olvidan fácilmente.
La gestión de excepciones «conecta» la gestión de errores directamente en el lenguaje de programación y a veces incluso en el sistema operativo. Una excepción es un objeto que se «lanza» desde el lugar del error y puede ser «capturado» por un manejador de excepción apropiado diseñado para manipular este tipo particular de error. Es como si la gestión de excepciones fuera una ruta de ejecución diferente y paralela que se puede tomar cuando las cosas van mal. Y como usa un camino separado de ejecución, no necesita interferir con el código ejecutado normalmente. Eso hace que el código sea más simple de escribir ya que no se fuerza al programador a comprobar los errores constantemente. Además, una excepción no es lo mismo que un valor de error devuelto por una función o una bandera fijada por una función para indicar una condición de error, que se puede ignorar. Una excepción no se puede ignorar, de modo que está garantizado que habrá que tratarla en algún momento. Finalmente, las excepciones proporcionan una forma de recuperarse de forma fiable de una mala situación. En lugar de salir simplemente del programa, a menudo es posible arreglar las cosas y restaurar la ejecución, lo que produce sistemas mucho más robustos.
Merece la pena tener en cuenta que la gestión de excepciones no es una característica orientada a objetos, aunque en lenguajes orientados a objetos las excepciones normalmente se representan con objetos. La gestión de excepciones existía antes que los lenguajes orientados a objetos.
En este Volumen se usa y explica la gestión de excepciones sólo por encima; el Volumen 2 (disponible en www.BruceEckel.com) cubre con más detalle la gestión de excepciones.