To throw or to throw not?

Aaron Brady castironpi at gmail.com
Fri Nov 14 03:10:39 EST 2008


On Nov 13, 10:09 pm, Steven D'Aprano <st... at REMOVE-THIS-
cybersource.com.au> wrote:
> On Thu, 13 Nov 2008 17:11:26 -0800, Emanuele D'Arrigo wrote:
> > I'm pondering on what is a bit of a philosophical dilemma. When should I
> > throw an exception and when should I not?
>
> > Suppose I have myFunc1() calling myFunc2() which in turn calls myFunc3
> > ().
> > Suppose myFunc3() has detected a problem. What should it do?
>
> > Throw an exception, forcing myFunc2() to handle it and/or trigger
> > another exception for myFunc1() to deal with? Or should it simply return
> > a meaningful error code, for myFunc2() and myFunc1() to handle as an
> > option but not forcing them to do so?
>
> In general, you should raise an exception. Then if myFunc2() can't handle
> it, it doesn't need to trigger another exception, the exception will just
> propagate up the call chain to myFunc1().
>
> There are cases where something like a meaningful error value is
> appropriate, but the only one I can think of right now is NaN in floating
> point maths.
>
> --
> Steven

If you need error flags, define them in a class:

class ErrFlags:
  onlyInCorner= object( )
  livesOnCeiling= object( )

def myFunc3( ):
  something( )
  return ErrFlags.onlyInCorner

def myFunc2( ):
  result= myFunc3( )
  if result is ErrFlags.onlyInCorder:
    something
  elif result is ErrFlags.livesOnCeiling:
    something

In some cases, you might want to call a method on the return object.

I agree with the fellows earlier.  Without further information,
exceptions are generally nice and solid.



More information about the Python-list mailing list