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

Взаимодействие обработчиков 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 сообщение.

128.1.-Сообщение-об-ошибке-при-отсутствии-CATCH-блока

Рис. 7.3. Сообщение об ошибке при отсутствии CATCH-блока