[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Consensus on error handling with DLMs



Randall Skelton wrote:
> 
> Hi all,
> 
> I've more or less finished writing an IDL interface to Postgres and I'm
> now in the debugging stage. I thought I'd take a poll to see what people
> think of appropriate error returns.  In this library I have a variety of
> function returns... integers, floats, doubles, strings, complex structures
> and so forth.  For integer returns, I usually default to giving the user a
> message with the handle IDL_MSG_INFO in IDL_Message and returning -1 on
> failure.  Is there a good protocol for signifying an error in strings,
> structures and arrays?  Some of my default string returns are themselves
> null strings (indicating that no data or message was found) so it wouldn't
> be wise to simply return a null string on error.  I am also very reluctant
> to return a float -1.0000 as testing for this can lead to problems with
> IEEE number definitions in C.  For the moment, I am using the
> IDL_MSG_LONGJMP to signal an error in all routines that don't return an
> IDL integer.  It stops the interpreter immediately (which isn't
> necessarily bad) as it signifies a major fault.  Comments?
> 
> Thanks,
> Randall

Your situation is a lot more complicated than mine, but I return integer status variables
in functions. Any actual data is returned in the argument list., e.g.:

FUNCTION blah, x1, x2, x3
  @error_codes

  CATCH, error_status
  IF ( error_status NE 0 ) THEN BEGIN
    CATCH, /CANCEL
    MESSAGE, !ERROR_STATE.MSG, /CONTINUE
    RETURN, FAILURE
  ENDIF    

  .... here do some interesting stuff. If an error occurs
  .... anywhere in the code I use a :

  MESSAGE, 'An error occurred counting the number of numbats', $
           /NONAME, /NOPRINT


  ... At the end of the code I have a :

  CATCH, /CANCEL
  RETURN, SUCCESS

END


In testing the result I sim0ply do a :

  @error_codes
  IF ( result NE SUCCESS ) THEN......

where SUCCESS and FAILURE are defined in error_codes.pro (there are other definitions as
well like WARNING and INFORMATION, UNDEFINED, etc). Like I said, the above is a very
simple approach but it's worked pretty well for me -  and I like the fact that there are
only two exits from the code, one for success and one for a failure. I used to have
returns peppered through code which sorta sucked.

paulv

p.s. I only turn this error checking on *after* debugging though - if code crashes I want
to know the line number i crashed at rather than always returning with a failure.
-- 
Paul van Delst           A little learning is a dangerous thing;
CIMSS @ NOAA/NCEP        Drink deep, or taste not the Pierian spring;
Ph: (301)763-8000 x7274  There shallow draughts intoxicate the brain,
Fax:(301)763-8545        And drinking largely sobers us again.
paul.vandelst@noaa.gov                   Alexander Pope.