Next: , Previous: 11.4.2, Up: 11.4


11.4.3 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/2

     {00433AI95−00433−01} 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/2

     {00433AI95−00433−01} package body File_System is
         procedure Open(F in out File_Handle; Name String) is
         begin
             if File_Exists(Name) then
                 ...
             else
                 raise File_Not_Found with "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.