Синтаксис оператора _try |
<оператор-try> = _try <оператор> [ <блок-обработки-исключения> ] [ <блок-очистки> ] ;
<оператор> - оператор программы или программный блок.
<оператор> = <обычный-оператор> | <составной-оператор>
<блок-обработки-исключения> - перечень исключительных ситуаций с операторами их ибработки.
<блок-обработки-исключения> = _except on <список-исключений> : <оператор> {on <список-исключений> : <оператор>} [ else <оператор> ]
<список-исключений> - перечень исключительных ситуаций, при возникновении которых выполняется указанный оператор.
<список-исключений> = <тип-или-группа-исключения> {, <тип-или-группа-исключения>}
<тип-или-группа-исключения> - идентификатор, описывающий исключительную ситуацию.
<тип-или-группа-исключения> = <стандартная-группа> | <стандартный-тип> | <определенная-пользователем-группа> | <определенный-пользователем-тип>
<стандартная-группа> - одна из предопределенных групп исключений (см. раздел "Стандартные исключения. ").
<стандартный-тип> - один из предопределенных типов исключений (см. раздел "Стандартные исключения. ").
<определенная-пользователем-группа> - группа исключений, заданная пользователем.
<определенная-пользователем-группа> = exception Ex<идентификатор-группы> [, Ex<идентификатор-группы>] [noMessage]
<определенный-пользователем-тип> - тип исключения, заданный пользователем.
<определенный-пользователем-тип> = exception Ex<идентификатор-типа>[(<идентификатор-группы>)] [, Ex<идентификатор-типа>[(<идентификатор-группы>)] [noMessage]
<оператор> - оператор программы или программный блок.
Ключевое слово else задает оператор, который будет выполнен при возникновении исключительной ситуации не указанной ни в одном on-блоке.
<блок-очистки> - блок гарантированной очистки (finally-блок). Выполняется после нормального выполнения try-блока, а также при возникновении необработанных исключений.
Если появилось исключение и было обработано в except-блоке, finally-блок по умолчанию выполняется, и чтобы его обойти применяется оператор _skipFinally. Имеется возможность, вызвав оператор _doFinally непосредственно выполнить finally-блок и выйти из try-блока.
<блок-очистки> = _finally <оператор>
Сгенерировать исключение указанного типа:
<оператор-raise> = _raise <тип-или-группа-исключения>;
Перейти в блок очистки. Текущая обработка оператора _try (try-блок или except-блок) прекращается:
<оператор-doFinally> = _doFinally;
Восстановить текущее исключение. После выполнения оператора _reRaise исключение считается необработанным несмотря на наличие on-блока для данного исключенния:
<оператор-reRaise> = _reRaise;
Продолжить выполнение с точки возникновения исключения:
<оператор-retry> = _retry;
Запретить прерывания во время выполнения оператора:
<оператор-noExcept> = _noExcept <оператор>;
Не выполнять блок очистки:
<оператор-skipFinally> = _skipFinally;