Оператор Raise возбуждает исключительную ситуацию.
raise-statement:
Raise expressionopt
Оператор Raise с указанным выражением вызывает возбуждение исключительной ситуации со значением, полученным в результате вычисления выражения. Данное значение должно представлять собой экземпляр объекта тип которого совпадает или является производным от System.Exception. Если в результате вычисления выражения получается Null, то возбуждается исключительная ситуация класса System.NullReferenceException.
Оператор Raise без указания выражения может быть использован только внутри обработчика исключительной ситуации в блоке Except оператора Try. В этом случае он инициирует продолжение обработки (т.е. дальнейшее пробрасывание) текущей исключительной ситуации, обрабатываемой в данный момент.
При возбуждении исключительной ситуации управление передается первому блоку Except в одном из объемлющих операторов Try, который может произвести обработку данной исключительной ситуации. Процесс, который выполняется после возбуждения исключительной ситуации и до передачи управления подходящему обработчику называется пробрасыванием исключения. Пробрасывание исключения заключается в повторном выполнении следующих шагов до тех пор пока не будет найден подходящий обработчик. В данном описании под точкой возбуждения изначально понимается место в программе, где была возбуждена исключительная ситуация.
В текущем функциональном члене анализируется каждый объемлющий точку возбуждения оператор Try. Для каждого оператора S, начиная с самого внутреннего объемлющего оператора Try и заканчивая внешним выполняются следующие шаги:
Если блок операторов в части Try оператора S объемлет точку возбуждения и S имеет один или более блоков Except, то данные блоки анализируются на предмет наличия подходящего обработчика. Первый блок Except, который обрабатывает ситуации возбужденного класса исключительной ситуации, либо одного из его базовых классов, считается подходящим обработчиком. Блок Except общего назначения считается подходящим обработчиком для любых исключительных ситуаций. Если в процессе был найден подходящий обработчик, то управление передается его блоку операторов.
В противном случае блок операторов в части Try или Except оператора S объемлет точку возбуждения и оператор S содержит блок Finally, то управление передается его блоку операторов. Если при его выполнении возбуждается новая исключительная ситуация, то обработка текущего исключения прекращается. В противном случае по завершении выполнения блоку операторов Finally обработка текущего исключения продолжается.
Если подходящий обработчик исключения не был обнаружен в текущем функциональном члене, то его вызов прерывается. Шаги, приведенные выше, повторяются для объемлющих вызовов в стеке вызовов и в качестве точки возбуждения считается оператор в котором был произведен вызов внутреннего функционального члена.
Если в результате обработки исключения была проанализирована вся цепочка вызовов в текущем потоке, что означает отсутствие подходящего обработчика, то выполнение текущего потока прерывается. Влияние такого прерывания обуславливается соответствующей реализацией.
Private Sub TestRaise();
Begin
Try
//Генерация ошибки
Raise New Exception("Ошибка выполнения!");
Except On Ex: Exception Do
//Обработка ошибки
Finally
End Try;
End Sub;
См.также: