Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Understanding Try Catch
Message
 
 
To
12/07/2018 16:48:37
Cetin Basoz
Engineerica Inc.
Izmir, Turkey
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
01661136
Message ID:
01661151
Views:
55
>>>>Hi,
>>>>
>>>>Do I understand correctly that if there is an error (typo or undeclared variable or whatever problem) within TRY/CATCH, the global ON ERROR DO MyErrorHandler() will catch it? That is, that TRY/CATCH is not "isolated" from the global error handling.
>>>>Please let me know if I am correct. Or, if I don't understand it correctly.
>>>>
>>>>TIA.
>>>
>>>You understood it wrong. A Try/Catch isolates the error from outside block (silences the error if you do nothing in CATCH). You can make the error available to outside block by using THROW in catch. ie:
>>>
>>>
>>>On Error Do errHandler
>>>Try
>>>	? "A"+15
>>>Catch To oErr
>>>	*	m.oErr.UserValue = "Error caught with catch."
>>>	Throw
>>>*	Throw "Error caught with catch."  && This is not the same thing
>>>Endtry
>>>? m.newVar
>>>On Error
>>>
>>>Procedure errHandler
>>>	? "Error: [["+Message()+"]]"
>>>Endproc
>>>
>>>
>>>PS: Personally I prefer using On Error. Try Catch is not as powerful IMHO, doesn't catch every error that ON ERROR catches for example.
>>
>>What about this code:
>>
>>ON ERROR do MyError
>>
>>TRY 
>>IF adfasdfa
>>ENDIF 
>>ENDTRY 
>>=MESSAGEBOX("End")
>>RETURN 
>>
>>FUNCTION MyError
>>MESSAGEBOX("Error happened")
>>
>>
>>The MessageBox with error shows when IF with undeclared variable is used. Do you see what I am seeing?
>
>No I see
>
>"Error happened"
>
>first and then "End".
>
>As I explained above, TRY...ENDTRY silences the error (Variable ... not found). You don't have CATCH there to handle nor a THROW within to pass that to your ON ERROR.
>
>Errors silenced by TRY ... ENDTRY are hardest to find IMHO. Instead of silencing handle them ( sometimes they may be silenced on purpose ).

Ok. In my view TRY ENDTRY does not silence the error (without CATCH) since ON ERROR is fired. IMHO if the TRY-ENDTRY were completely isolate the problem (silence it), the ON ERROR would not fire.
But as long as I understand how it works, it is fine.

Update. I want to be sure you don't think I am arguing with you - you know VFP much better than me. I agree with what you said that TRY ENDTRY silences the error (undeclared variable). But another error handler is catching it and to me it means that the error was not ignored completely. That is, it was not silenced. In fact, I admit, I used to think that TRY - ENDTRY will completely isolate the error. That is, if I write any kind of JUNK code within TRY ENDTRY, the user will never see it. And I was wrong. This is all I wanted to confirm.
"The creative process is nothing but a series of crises." Isaac Bashevis Singer
"My experience is that as soon as people are old enough to know better, they don't know anything at all." Oscar Wilde
"If a nation values anything more than freedom, it will lose its freedom; and the irony of it is that if it is comfort or money that it values more, it will lose that too." W.Somerset Maugham
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform