Справочник Ada 2012
11.2 Обработчики исключений
Обработка одного или нескольких исключений задаётся обработчиком_исключений.
Синтаксис
handled_sequence_of_statements ::=
последовательность_операторов
[exception
обработчик_исключений
{обработчик_исключений}]
последовательность_операторов
[exception
обработчик_исключений
{обработчик_исключений}]
обработчик_исключений ::=
when [спецификация_параметра_выбора:] выбор_исключения {| выбор_исключения} =>
последовательность_операторов
when [спецификация_параметра_выбора:] выбор_исключения {| выбор_исключения} =>
последовательность_операторов
Правила легитимности
Имя_исключения в выборе_исключения должно обозначать исключение.
Выбор с исключение_именем покрывает указанное исключение. Выбор с others покрывает все исключения, не указанные предыдущими выборами в том же handled_sequence_of_statements. Два выбора в разных обработчиках_исключений одного handled_sequence_of_statements не должны покрывать одно и то же исключение.
Выбор с others разрешён только для последнего обработчика в handled_sequence_of_statements и как единственный выбор этого обработчика.
Имя_исключения в выборе не должно обозначать исключение, объявленное в формальном пакете обобщения.
Статическая семантика
спецификация_параметра_выбора объявляет параметр_выбора, являющийся объектом-константой типа Exception_Occurrence (см. 11.4.1). При обработке события исключения параметр выбора обработчика, если он есть, представляет собой событие исключения, которое обрабатывается.
Динамическая семантика
Выполнение handled_sequence_of_statements состоит из выполнения последовательности_операторов. Необязательные обработчики используются для обработки любых исключений, которые передаются последовательностью_операторов.
Примеры
Пример обработчика исключений:
begin
Open(File, In_File, "input.txt"); -- см. A.8.2
exception
when E : Name_Error =>
Put("Невозможно открыть входной файл: ");
Put_Line(Exception_Message(E)); -- см. 11.4.1
raise;
end;
Open(File, In_File, "input.txt"); -- см. A.8.2
exception
when E : Name_Error =>
Put("Невозможно открыть входной файл: ");
Put_Line(Exception_Message(E)); -- см. 11.4.1
raise;
end;