Распечатать страницу

Конструкция TRY CATCH FINALLY в Visual FoxPro

« Назад

Команда

TRY
                   [tryCommands]
         [CATCH [TO VarName] [WHEN lExpression]
                   [catchCommands]]
         [FINALLY
                   [finallyCommands]]
         ENDTRY

употребляется для обработки ошибок исполнения (исключений).

Команда является конструкцией. Порядок ее выполнения следующий:

- первоначально выполняются операторы tryCommands;

- если при выполнении tryCommands ошибки не возникло, то управление передается FINALLY-блоку;

- если при выполнении tryCommands произошла ошибка, то VFP создает объект-исключение и передает управление CATCH-блоку; ссылка на объект-исключение сохраняется в переменной VarName. После обработки ошибки управление будет передано FINALLY-блоку.

Команда ENDTRY, завершающая конструкцию, обязательна. Ее отсутствие может привести к зависанию приложения (VFP перестанет отвечать).

Параметры:

tryCommands – операторы TRY-блока, которые могут вызвать ошибку.

VarName – переменная, хранящая ссылку на объект-исключение.

Задание CATCH без параметров аналогично заданию

CATCH WHEN .T.

Если задана опция WHEN и lExpression вычисляется со значением .F., то VFP освобождает объект-исключение и устанавливает в VarName NULL. Также объект-исключение освобождается, когда переменная VarName, содержащая ссылку на этот объект, освобождается или изменяет значение.

Переменная VarName не может быть ссылкой на свойство объекта.

lExpression – логическое выражение; операторы catchCommands выполняются, если lExpression вычисляется со значением .T., и не выполняются – в противном случае. Выражение lExpression может содержать ссылку на объект-исключение (посредством VarName), анализ значения которой позволяет определиться в отношении мер по обработке ошибки.

catchCommands – операторы CATCH-блока, обрабатывающие ошибку.

finallyCommands – операторы FINALLY-блока, выполняемые после операторов tryCommands, если последние не вызвали ошибки, или после операторов catchCommands, если ошибка обнаружена. FINALLY-блок может содержать операторы, освобождающие выделенные в TRY-блоке ресурсы.

Пример:

&& Ошибку обработает CATCH-блок

try

&& Попытка извлечь корень из отрицательного числа приведет к ошибке

x = Sqrt(–5)

catch to oErr

set space off

&& oErr – идентификатор объекта-исключения

? "Catch:", oErr.ErrorNo, "; ", oErr.Message

store .NULL. to x

&& Управление передается FINALLY-блоку

finally

if not IsNull(x) then

? x

else

  ? "Результат не найден!"

endif

endTry

Сообщения программы:

Catch: 61; SQRT( ) argument cannot be negative

Результат не найден!