Справочник по Ada 95
11.4 Обработка исключений
Когда происходит исключение, обычное выполнение программы прерывается, и управление передаётся соответствующему обработчику исключений exception_handler, если таковой имеется. Обработать исключение означает отреагировать на исключительное событие. Распространить исключение означает повторно вызвать его в другом контексте; то есть, не отреагировать на исключительное событие в текущем контексте.
Динамическая семантика
В рамках данной задачи, если выполнение конструкции a определяется этим международным стандартом как (частично) включающее выполнение конструкции b, то во время выполнения b выполнение a динамически включает выполнение b. Самое внутреннее динамически включающее выполнение данного выполнения — это динамически включающее выполнение, которое началось последним.
Когда исключение генерируется выполнением данной конструкции, остальная часть выполнения этой конструкции прерывается; то есть, любые части выполнения, которые ещё не произошли, не выполняются. Конструкция сначала завершается, а затем покидается, как объяснено в 7.6.1. Затем:
- Если конструкция является телом задачи task_body, исключение не распространяется дальше;
- Если конструкция является последовательностью операторов sequence_of_statements обработанной последовательности операторов handled_sequence_of_statements, имеющей обработчик с выбором, охватывающим исключение, то исключение обрабатывается этим обработчиком;
- В противном случае исключение распространяется на самое внутреннее динамически включающее выполнение, что означает, что исключение повторно вызывается в этом контексте.
Когда исключение обрабатывается данным обработчиком, спецификация параметра выбора choice_parameter_specification, если таковая имеется, сначала обрабатывается, что создаёт параметр выбора и инициализирует его значение исключением. Затем выполняются операторы sequence_of_statements обработчика; это выполнение замещает прерванную часть выполнения операторов sequence_of_statements.
ПРИМЕЧАНИЯ
1 Обратите внимание, что исключения, поднятые в части объявления declarative_part тела, не обрабатываются обработчиками handled_sequence_of_statements этого тела.