Ада-95. Компилятор GNAT

       

Обработчики исключений


Обработчик исключения может размещаться в конце тела подпрограммы, пакета или настраиваемого модуля, в конце тела задачи или входа, а также в конце инструкции блока или инструкции принятия (accept).

Заметим, что обработчик исключения не является обязательной частью этих конструкций.

Рассмотрим следующий пример:

declare

X : Integer range 1..20;

begin

Put("please enter a number "); Get(X); Put("thank you");

exception

when Constraint_Error => Put("that number should be between 1 and 20"); when others => Put("some other error occurred"); end;

Здесь описаны два обработчика. В одном выполняется обработка только исключений ограничения (Constraint_Error). Второй обработчик выполняет обработку всех остальных исключений (others).

Таким образом, если пользователь вводит число в диапазоне от 1 до 20, то ошибки не происходит и появляется сообщение "thank you".

В противном случае, перед завершением выполнения появляется сообщение обработчика исключения Constraint_Error: "that number should be between 1 and 20".

В случае возникновения какого-либо другого исключения появится сообщение от второго обработчика: "some other error occurred".

Можно описать обработчик исключений так, чтобы он обрабатывал несколько указанных исключений. Для выполнения этого, исключения должны разделяться символом '|':

. . . exception

. . . when Constraint_Error | Storage_Error => . . .

Также следует заметить, что обработчик when others всегда должен быть последним в списке обработчиков исключений.

Если мы хотим чтобы пользователь продолжал ввод чисел до тех пор пока не пропадет ошибка ограничения, мы можем переписать предыдущий пример подобным образом:

loop

declare

. . .

begin

. . .

Get(X); exit;

exception

when Constraint_Error => Put("that number ... end;

. . . -- здесь будет продолжено выполнение -- после возникновения исключения -- и обработки его обработчиком end loop;

Кроме того, этот пример показывает точку в которой будет продолжено выполнение инструкций после возникновения исключения и его обработки обработчиком.



Содержание раздела