Виды обработчиков ошибок в Microsoft Visual FoxPro
« Назад Ошибки исполнения можно обрабатывать:
Функция SYS(2410)возвращает вид обработчика (табл. 7.2), которому передается обнаруженная ошибка. Таблица 7.2 Значения, возвращаемые функцией SYS(2410)
Тип возвращаемого функцией SYS(2410) результата – Character. Замечание. Если TRY-конструкция не содержит оператора CATCH или опция WHEN lExpression имеющегося CATCH-оператора вычисляется со значением .F., то SYS(2410) может возвращать неверное значение. Пример. Имеются 3 вида обработчиков. При вызове обработчика заполняется соответствующая строка массива errHandlerType; данные, помещенные в массив, выводятся на печать. public errHandlerType(3, 3) store .F. to errHandlerType && Имеются обработчики ON ERROR, Error и TRY && on error do ErrorHandler with Error( ), Message( ) ob = NewObject("SomeClass") x = –9.0^(2 / 3) && Ошибка try ob.SomeMethod && При вызове метода возникнет ошибка x = Sqrt(–5.0) && Ошибка catch to oErr FillInErrHandlerType(Val(Sys(2410)), oErr.ErrorNo, oErr.Message) endTry && && Определяем, какие ошибки имели место if errHandlerType(1, 1) then ? "Ошибка обнаружена TRY-конструкцией:" ? "№ ", errHandlerType(1, 2), "; ", errHandlerType(1, 3) endif if errHandlerType(2, 1) then ? "Вызван обработчик события Error:" ? "№ ", errHandlerType(2, 2), "; ", errHandlerType(2, 3) endif if errHandlerType(3, 1) then ? "Выполнен ON ERROR-обработчик:" ? "№ ", errHandlerType(3, 2), "; ", errHandlerType(3, 3) endif define class SomeClass as Custom procedure SomeMethod x = 1 + "A" && Ошибка: смешение типов данных endProc && && Обработчик события Error procedure Error(nError, cMethod, nLine) FillInErrHandlerType(Val(Sys(2410)), nError, cMethod) endProc endDefine && ON ERROR-обработчик procedure ErrorHandler(errCode, errMessage) FillInErrHandlerType(Val(Sys(2410)), errCode, errMessage) endProc && Формирует строку массива errHandlerType procedure FillInErrHandlerType(iErrType, errorNo, erMessage) errHandlerType(iErrType, 1) = .T. errHandlerType(iErrType, 2) = errorNo errHandlerType(iErrType, 3) = erMessage endProc Сообщения программы: Ошибка обнаружена TRY-конструкцией: № 61; SQRT( ) argument cannot be negative Вызван обработчик события Error: № 107; SomeMethod Выполнен ON ERROR-обработчик: № 78; ** or ^ domain error |