raising classes

Paul Rubin phr-n2002b at NOSPAMnightsong.com
Tue Aug 20 00:18:51 CEST 2002

Tim Peters <tim.one at comcast.net> writes:
> You can if you want to (try it!).  I expect some people don't just because
> it's more typing, while others don't because instantiating an instance of a
> class is more expensive than merely using the (already full constructed)
> class object itself.

Are you saying that 

   class foo(Exception): pass
   raise foo

raises foo's class object rather than instantiating foo?

What happens on

  class foo(Exception): pass
  class bar(foo): pass
       raise bar
  except foo:
    print 'foo exception'

Raising bar is supposed to be caught by "except foo".  But bar and foo
are both class objects, so bar is not an instance of foo.

Are you saying the 'except' statement treats class objects specially,
and figures out if a thrown class object is a subclass of the caught
class, while using something like isinstance if you throw an instance
rather than a class object?

I guess that's not so terrible; there's just something "more than one way
to do it"-ish about it.

More information about the Python-list mailing list