Взаимодействие обработчиков VFP
« Назад Если ошибка возникает в вызываемом в TRY-блоке методе некоторого объекта, то ее анализ выполняется обработчиком события Error этого объекта; если же обработчик не задан, то обработка осуществляется CATCH-командами. Если таковых нет, то вступит в действие стандартный обработчик ошибок. Пример. В первом варианте кода присутствуют 2 обработчика. Однако хотя метод SomeMethod вызывается в TRY-блоке, ошибка будет передана процедуре Error( ). ob = NewObject("SomeClass") try ob.SomeMethod && Будет вызван Error-обработчик catch to oErr set space off && oErr – идентификатор объекта-исключения ? "Catch:", oErr.ErrorNo, "; ", oErr.Message endTry define class SomeClass as Custom procedure SomeMethod x = Sqrt(–5.0) && Ошибка endProc && && Обработчик события Error procedure Error(nError, cMethod, nLine) ? "Error:", nError endProc endDefine Во втором варианте кода обработчик Error отсутствует, поэтому при возникновении ошибки управление будет передано CATCH-блоку. ob = NewObject("SomeClass") try ob.SomeMethod && Ошибку будет обработана в CATCH-блоке catch to oErr set space off ? "Catch:", oErr.ErrorNo, "; ", oErr.Message endTry define class SomeClass as custom procedure SomeMethod x = Sqrt(–5.0) endProc endDefine Если CATCH-блок отсутствует и не заданы ON ERROR- и Error-обработчики, то после выполнения кода ob = NewObject("SomeClass") try ob.SomeMethod endTry … возникнет приведенное на рис. 7.3 сообщение. Рис. 7.3. Сообщение об ошибке при отсутствии CATCH-блока |