[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Catch problem
- Subject: Re: Catch problem
- From: davidf(at)dfanning.com (David Fanning)
- Date: Tue, 2 Jan 2001 11:53:13 -0700
- Newsgroups: comp.lang.idl-pvwave
- Organization: Fanning Software Consulting
- References: <92t5f7$ejp$1@mercury.wright.edu>
- Xref: news.doit.wisc.edu comp.lang.idl-pvwave:22791
ALAN FRAZIER (s007amf@news.wright.edu) writes:
> Recently, I started learning the catch procedure to help with some error
> checking. I typed the code word-for-word out of the IDL 5.3
> documentation:
>
> PRO ABC
>
> A = fltarr(10)
>
> CATCH, Error_status
>
> IF Error_status NE O THEN BEGIN
> PRINT, 'ERROR INDEX: ', Error_Status
> PRINT, 'ERROR MESSAGE: ', !ERR_STRING
> A = FLTARR(12)
> ENDIF
>
> A[11] = 12
>
> HELP, A
>
> END
>
> to help me learn this command. However, this code does not seem to
> execute correctly. As far as I can tell, the code causes some sort of
> infinite loop on the if statement. Any ideas what I am doing wrong? I am
> using IDL 5.4 on a Mac.
There are two ways you can get into an infinite loop
in a CATCH error handler. (Well, two ways that I am
intimately familiar with.) First, you can have errors
in your error handling code. (Very, very bad, this one.)
Or, you can fail to fix the error in your error handing
code and continue to make the same error over and over
again. (I call this the "same spouse, different name"
syndrome.)
The secret to solving both of these problems is to
cancel the CATCH as the *FIRST* thing you do in the
error handling code (and pray that you can at least
spell *this* line correctly!). The second thing to
do is to exit the code (usually, unless you really
do know how to catch errors, in which case my hat
if off to you).
I like to use the ERROR_MESSAGE program on my web
page for error handling, because it prints out a
nice message that tells me where the actual error
occurred. This is handy if you want to fix the
error. :-)
CATCH, theError
IF theError NE 0 THEN BEGIN
CATCH, /Cancel
ok = Error_Message(/Traceback)
RETURN
ENDIF
You can find Error_Message here:
http://www.dfanning.com/programs/error_message.pro
Cheers,
David
--
David Fanning, Ph.D.
Fanning Software Consulting
Phone: 970-221-0438 E-Mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Toll-Free IDL Book Orders: 1-888-461-0155