Справочник по Ada 95
11.2 Обработчики исключений
Реакция на одно или несколько исключений задается обработчиком exception_handler.
Синтаксис
handled_sequence_of_statements ::=
sequence_of_statements
[exception
exception_handler
{exception_handler}]
sequence_of_statements
[exception
exception_handler
{exception_handler}]
exception_handler ::=
when [choice_parameter_specification:] exception_choice {| exception_choice} =>
sequence_of_statements
when [choice_parameter_specification:] exception_choice {| exception_choice} =>
sequence_of_statements
choice_parameter_specification ::= defining_identifier
exception_choice ::= имя_исключения | others
Правила легальности
Выбор с имя_исключения покрывает указанное исключение. Выбор с others покрывает все исключения, не указанные предыдущими выборами в том же handled_sequence_of_statements. Два выбора в разных exception_handler различных handled_sequence_of_statements не должны покрывать одно и то же исключение.
Выбор с others разрешен только для последнего обработчика в handled_sequence_of_statements и только как единственный выбор в этом обработчике.
имя_исключения выбора не должно обозначать исключение, объявленное в формальном пакете-параметре обобщения.
Статическая семантика
choice_parameter_specification объявляет параметр выбора, который является постоянным объектом типа Exception_Occurrence (см. 11.4.1). Во время обработки возникновения исключения параметр выбора, если таковой имеется, в обработчике представляет собой возникновение исключения, которое обрабатывается.
Динамическая семантика
Выполнение handled_sequence_of_statements состоит из выполнения sequence_of_statements. Необязательные обработчики используются для обработки любых исключений, которые распространяются 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;