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