DocAda(tm) is a productivity tool of KSCE

Prev | Up | ____ | Back | Forward
About DocAda Light: Preface / Preliminary / Help / TOC / Copyright
DocAda Online at the Ada Home: Complete RM95 / Updates / News

11.4.2 Example of Exception Handling

Examples

Exception handling may be used to separate the detection of an error from the response to that error:

   
       with Ada.Exceptions;
       use Ada;
       package File_System is
           type File_Handle is limited private;

           File_Not_Found : exception;
           procedure Open(F : in out File_Handle; Name : String);
               -- raises File_Not_Found if named file does not exist

           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

           ...
       end File_System;

       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;

           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;

           ...

       end File_System;

       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;

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.

About DocAda Light: Preface / Preliminary / Help / TOC / Copyright
DocAda Online at the Ada Home: Complete RM95 / Updates / News
Prev | Up | ____ | Back | Forward


Copyright © 1994-1997 by Kempe Software Capital Enterprises. All Rights Reserved. For comments on this DocAda(tm) hypertext document, please write to KSCE, at docada@ksce.com