Руководство по Ada (Ada 2022)
11.3 Операторы и выражения raise
Оператор raise_statement вызывает исключение.
Синтаксис
Если raise_expression встречается внутри expression в одном из следующих контекстов, raise_expression должен быть помещён в скобки внутри expression:
Правила легальности
Имя exception_name, если оно есть, оператора raise_statement или raise_expression должно обозначать исключение. Оператор raise_statement без имени exception_name (то есть оператор повторного вызова исключения) должен находиться внутри обработчика, но не внутри тела, заключённого этим обработчиком.
Правила разрешения имён
Выражение string_expression или string_simple_expression, если оно есть, оператора raise_statement или raise_expression должно иметь тип String.
Ожидаемый тип для raise_expression должен быть любым типом.
Динамическая семантика
Вызвать исключение — это вызвать новое событие этого исключения, как объясняется в 11.4. Для выполнения оператора raise_statement с именем exception_name вызывается указанное исключение. Аналогично, при вычислении raise_expression вызывается указанное исключение. В обоих этих случаях, если присутствует выражение string_expression или string_simple_expression, оно вычисляется, и его значение ассоциируется с событием исключения. При выполнении оператора повторного вызова исключения повторно вызывается событие исключения, которое вызвало передачу управления в ближайший внешний обработчик.
ПРИМЕЧАНИЕ Если вычисление string_expression или string_simple_expression вызывает исключение, это исключение распространяется вместо исключения, обозначенного именем exception_name оператора raise_statement или raise_expression.
Примеры
Примеры операторов raise:
raise Ada.IO_Exceptions.Name_Error; -- см. A.13
raise Queue_Error with "Очередь заполнена"; -- см. 9.11
raise Queue_Error with "Очередь заполнена"; -- см. 9.11
raise; -- повторно вызвать текущее исключение
-- Пример выражения raise см. в определениях подсистемы потоков в 13.13.1.