Manejo de excepciones


En computación y programación de computadoras , el manejo de excepciones es el proceso de responder a la ocurrencia de excepciones (condiciones anómalas o excepcionales que requieren un procesamiento especial) durante la ejecución de un programa . En general, una excepción interrumpe el flujo normal de ejecución y ejecuta un controlador de excepciones registrado previamente ; los detalles de cómo se hace esto dependen de si se trata de una excepción de hardware o de software y de cómo se implementa la excepción de software. El manejo de excepciones, si se proporciona, es facilitado por un lenguaje de programación especializadoconstrucciones, mecanismos de hardware como interrupciones , o instalaciones de comunicación entre procesos (IPC) del sistema operativo (SO) como señales . Algunas excepciones, especialmente las de hardware, pueden manejarse con tanta gracia que la ejecución puede reanudarse donde se interrumpió.

La definición de una excepción se basa en la observación de que cada procedimiento tiene una condición previa , un conjunto de circunstancias por las cuales terminará "normalmente". [1] Un mecanismo de manejo de excepciones permite que el procedimiento genere una excepción [2] si se viola esta condición previa, [1] por ejemplo, si se ha llamado al procedimiento en un conjunto anormal de argumentos. El mecanismo de manejo de excepciones luego maneja la excepción. [3] La condición previa y la definición de excepción son subjetivas .. El programador define completamente el conjunto de circunstancias "normales", por ejemplo, el programador puede considerar que la división por cero no está definida, por lo tanto, una excepción, o idear algún comportamiento como devolver cero o un valor especial "ZERO DIVIDE" (eludiendo la necesidad para excepciones). [4]

Desde el punto de vista del autor de una rutina , generar una excepción es una forma útil de señalar que una rutina no se pudo ejecutar normalmente; por ejemplo, cuando un argumento de entrada no es válido (p. ej., el valor está fuera del dominio de una función ). o cuando un recurso del que depende no está disponible (como un archivo faltante, un error de disco duro o errores de falta de memoria), o que la rutina ha detectado una condición normal que requiere un manejo especial, por ejemplo, atención, fin de archivo . En sistemas sin excepciones, las rutinas necesitarían devolver algún código de error especial . Sin embargo, esto a veces se complica por el problema del semipredicado , en el que los usuarios de la rutina necesitan escribir código adicional para distinguir los valores devueltos normales de los erróneos.

Tomando una visión amplia, los errores pueden considerarse como un subconjunto adecuado de excepciones. [5] Por ejemplo, el código de retorno y el patrón errno que se encuentran en C pueden considerarse una forma de manejo de excepciones. [6] Se prefiere el término "excepción" a "error" porque no implica que algo ande mal: una condición que un procedimiento o un programador considera un error puede no serlo para otro. [7] Incluso el término "excepción" puede ser engañoso porque su connotación típica de "valor atípico" indica que ha ocurrido algo infrecuente o inusual, cuando en realidad generar la excepción puede ser una situación normal y habitual en el programa.[7]Por ejemplo, suponga que una función de búsqueda para una matriz asociativa genera una excepción si la clave no tiene ningún valor asociado. Según el contexto, esta excepción de "clave ausente" puede ocurrir con mucha más frecuencia que una búsqueda exitosa. [8]

Una influencia importante en el uso de excepciones es la presión social, es decir, "ejemplos de uso, que normalmente se encuentran en bibliotecas principales y ejemplos de código en libros técnicos, artículos de revistas y foros de discusión en línea, y en los estándares de código de una organización". [9]

El primer manejo de excepciones de hardware se encontró en UNIVAC I de 1951. El desbordamiento aritmético ejecutó dos instrucciones en la dirección 0, que podían transferir el control o corregir el resultado. [10]