Which exception to use?

Chad Netzer cnetzer at mail.arc.nasa.gov
Tue Jan 28 15:43:29 EST 2003


On Tuesday 28 January 2003 11:39, Edward C. Jones wrote:
> Which exception is it best to use in the following pieces of code?
>
> if len(sys.argv) != 2:
>      raise SomeException, 'program requires exactly one argument'
>
> if len(sometuple) != 3:
>      raise SomeException, 'sometuple must have length 3'
>
> I use TypeError or ValueError but they don't feel right. I wish there
> was a SizeError or LengthError.

I do things like this for some library functions that I create (I 
welcome discussion about whether it is a good approach)

class ArgumentError( Exception ):
    pass

then when arguments to functions are not acceptable:

if some_arg < 0:
    raise ArgumentError, "such-and-such argument must not be negative."

I like distinguishing errors in the use of the API, from errors in the 
implementation (ie. the various built in Exceptions), at least when 
there IS a distinction.

Bjorn Pettersen indicated that printing the error to stderr and exiting 
is one way to go, but it wouldn't be proper for my library function to 
terminate a caller's program (although using the 'warnings' module to 
output the error message is a nice alternative to printing to stderr 
these days.)

Also, Peter Hansen indicated that the following form of exception 
raising is preferred:

    raise ArgumentError("such-and-such argument must not be negative.")

I'd be interested to know what the preferred method is (if any).  I 
think raising the class itself is more intuitive to my mind (rather 
than building an instance to raise).  Is there a preferred style?

-- 
Bay Area Python Interest Group - http://www.baypiggies.net/

Chad Netzer
(any opinion expressed is my own and not NASA's or my employer's)





More information about the Python-list mailing list