Оператор Try

Оператор Try предоставляет механизм для перехвата исключительных ситуаций, возникающих при выполнении блока вложенных операторов. Также оператор Try предоставляет возможность указания блока операторов, которые будут выполнены при передаче управления за пределы оператора Try.

try-statement:

Try   block   catch-clauses   End Try

Try   block   finally-clause   End Try

Try   block   catch-clauses   finally-clause   End Try

catch-clauses:

Except   specific-catch-clauses   else-catch-clauseopt

Except   block

specific-catch-clauses:

specific-catch-clause

specific-catch-clauses   specific-catch-clause

specific-catch-clause:

On   exception-variable-declarationopt   class-type   Do

Beginopt   block   Endopt;

exception-variable-declaration:

identifier   :

else-catch-clause:

Else

Beginopt   block   Endopt;

finally-clause:

Finally   block

Имеются три возможных формы оператора Try:

В случае если для блока Except указан тип обработчика, то данный тип должен быть производным от System.Exception.

Если в блоке Except указан как тип обработчика, так и идентификатор, то объявляется переменная исключения с указанным именем и типом. Переменная исключения подобна локальной переменной, областью действия которой является блок операторов в блоке Except. Во время выполнения обработчика данная переменная представляет текущую обрабатываемую исключительную ситуацию.

Обработчик Except без указанного типа обработчика называется обработчиком общего назначения. Оператор Try может содержать только один обработчик общего назначения и он должен быть последним в цепочке обработчиков исключений.

Пример

Imports System;
Public Class TestException
    Public Sub Test(a, b: integer);
    Begin
        //Код процедуры
        //Проверка соотнощения параметров A и B
        If <Условие проверки> Then
            Raise New ArgumentException("Недопустимое соотношение параметров A и B");
        //Проверка допустимого диапазона значений параметров
        Elseif <Условие проверки> Then
            Raise New ArgumentOutOfRangeException("Значения параметров выходят за пределы допустимого диапазона");
        Else
            //Основной код процедуры выполняемый, если
            //все проверки параметров пройдены
        End If;
    End Sub Test;
End Class TestException;

Public Class Program
    Public Sub Main();
    Var
        Obj: TestException = New TestException();
    Begin
        Try
            //Выполнение процедуры Test с какими-либо значениями параметров;
            Obj.Test(<Значения параметров>);
        Except On Ex: ArgumentException Do
            Begin
                //Обработка исключительной ситуации
                //при недопустимом соотношении параметров A и B
            End;
        On Ex: ArgumentOutOfRangeException Do
            Begin
                //Обработка исключительной ситуации
                //при выходе значений параметров A и B за пределы допустимого диапазона
            End;
        Else
            Begin
                //Обработка всех остальных исключительных ситуаций
            End;
        Finally
            //Блок, выполняемый всегда
        End Try;
    End Sub Main;
End Class Program;

См.также:

Операторы