Programación en Ada/Unidades predefinidas/Ada.Exceptions
Información sobre la excepción
editarAda proporciona información sobre una determinada excepción en un objeto del tipo Exception_Ocurrence, definido dentro del paquete predefinido Ada.Exceptions junto con otras funciones que toman como parámetro una ocurrencia de excepción.
- Exception_Name: devuelve el nombre del tipo de la excepción en notación de puntos completa en letra mayúscula, por ejemplo "PILA.ERROR".
- Exception_Message: devuelve un mensaje de una línea con la causa y la ubicación de la excepción. No contiene el nombre de la excepción.
- Exception_Information: devuelve una cadena que incluye el nombre de la excepción, la causa y la ubicación y debería proporcionar detalles de la traza de la excepción.
Para comunicar dicha ocurrencia, se emplea la siguiente notación, por ejemplo:
with
Ada.Exceptions;use
Ada.Exceptions; -- ...exception
when
Evento: PresiónElevada | TemperaturaElevada => Put ("Excepción: "); Put (Exception_Name(Evento)); New_Line;when
Evento:others
=> Put ("Excepción no prevista: "); Put (Exception_Name(Evento)); New_Line; Put (Exception_Message(Evento));end
;
En ocasiones puede resultar útil almacenar una ocurrencia. Por ejemplo, sería útil crear un registro de las excepciones producidas en la ejecución de un programa almacenándolas en una lista o vector de ocurrencias. Nótese que el tipo Exception_Occurrence es limitado, de modo que no puede ser asignado para ser guardado. Por esta razón Ada.Exceptions proporciona el procedimiento y la función Save_Ocurrence.
El tipo Exception_Id puede entenderse como un tipo enumeración. Toda
excepción declarada mediante la palabra reservada exception
puede ser
considerada como uno de los literales del tipo Exception_Id y, por lo
tanto, tiene asociado una identificación, que es el literal
correspondiente. Nótese que se refiere ahora a excepciones y a ocurrencias de las mismas. Los literales aludidos serían referencias a
Constraint_Error, TemperaturaElevada, etc.; en general, las excepciones predefinidas
y las declaradas. Cada una de ellas es en rigor uno de los valores que puede
tomar el tipo Exception_Id. El atributo Identity proporciona la
identificación de una excepción. Por ejemplo:
declare
Fallo_Válvula:exception
; Id: Ada.Exceptions.Exception_Id;begin
-- ... Id := Fallo_Válvula'Identity; -- ...end
;
El programador puede establecer su propio mensaje para una ocurrencia
concreta elevándola mediante Raise_Exception en lugar de hacerlo con
raise
seguido del nombre de la excepción. Por ejemplo:
declare
Fallo_Válvula :exception
;begin
-- ... Raise_Exception (Fallo_Válvula'Identity, "Error de apertura"); -- ... Raise_Exception (Fallo_Válvula'Identity, "Error de cierre"); -- ...exception
when
Evento: Fallo_Válvula => Put(Exception_Message(Evento));end
;
Esta llamada es equivalente en Ada 2005 a la siguiente sentencia:
raise
Fallo_Válvulawith
"Error de apertura";
Especificación de Ada.Exceptions
editarSegún el manual de referencia de Ada el paquete Ada.Exceptions debe tener esta especificación:
package
Ada.Exceptionsis
type
Exception_Idis
private
; Null_Id :constant
Exception_Id;function
Exception_Name(Id : Exception_Id)return
String;type
Exception_Occurrenceis
limited
private
;type
Exception_Occurrence_Accessis
access
all
Exception_Occurrence; Null_Occurrence :constant
Exception_Occurrence;procedure
Raise_Exception(E :in
Exception_Id; Message :in
String := "");function
Exception_Message(X : Exception_Occurrence)return
String;procedure
Reraise_Occurrence(X :in
Exception_Occurrence);function
Exception_Identity(X : Exception_Occurrence)return
Exception_Id;function
Exception_Name(X : Exception_Occurrence)return
String;-- Same as Exception_Name(Exception_Identity(X)).
function
Exception_Information(X : Exception_Occurrence)return
String;procedure
Save_Occurrence(Target :out
Exception_Occurrence; Source :in
Exception_Occurrence);function
Save_Occurrence(Source : Exception_Occurrence)return
Exception_Occurrence_Access;private
...-- not specified by the language
end
Ada.Exceptions;