« Назад
Команда
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
Результат не найден!
|