AARM95 - Example of Exception Handling
Author: JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor

Contents Index Previous Next

# 11.4.2 Example of Exception Handling

#### Examples

1
Exception handling may be used to separate the detection of an error from the response to that error:
2
`with Ada.Exceptions;
use Ada;
package File_System is
type File_Handle is limited private;`
3
`File_Not_Found : exception;
procedure Open(F : in out File_Handle; Name : String);
-- raises File_Not_Found if named file does not exist`
4
`End_Of_File : exception;
procedure Read(F : in out File_Handle; Data : out Data_Type);
-- raises End_Of_File if the file is not open`
5
`...
end File_System;`
6
`package body File_System is
procedure Open(F : in out File_Handle; Name : String) is
begin
if File_Exists(Name) then
...
else
Exceptions.Raise_Exception(File_Not_Found'Identity,
"File not found: " & Name & ".");
end if;
end Open;`
7
`procedure Read(F : in out File_Handle; Data : out Data_Type) is
begin
if F.Current_Position <= F.Last_Position then
...
else
raise End_Of_File;
end if;
end Read;`
8
`...`
9
`end File_System;`
10
`with Ada.Text_IO;
with Ada.Exceptions;
with File_System; use File_System;
use Ada;
procedure Main is
begin
... -- call operations in File_System
exception
when End_Of_File =>
Close(Some_File);
when Not_Found_Error : File_Not_Found =>
Text_IO.Put_Line(Exceptions.Exception_Message(Not_Found_Error));
when The_Error : others =>
Text_IO.Put_Line("Unknown error:");
if Verbosity_Desired then
Text_IO.Put_Line(Exceptions.Exception_Information(The_Error));
else
Text_IO.Put_Line(Exceptions.Exception_Name(The_Error));
Text_IO.Put_Line(Exceptions.Exception_Message(The_Error));
end if;
raise;
end Main;`
11
In the above example, the File_System package contains information about detecting certain exceptional situations, but it does not specify how to handle those situations. Procedure Main specifies how to handle them; other clients of File_System might have different handlers, even though the exceptional situations arise from the same basic causes.

#### Wording Changes from Ada 83

11.a
The sections labeled ``Exceptions Raised During ...'' are subsumed by this clause, and by parts of Section 9.

Contents Index Previous Next Legal