#################################### # class exceptions, funcs to raise # Sub matches Super in an except #################################### class Super: def __init__(self, value): self.errno = value class Sub(Super): def extra(self): return self.errno * 2 def raiser1(): raise Super(8) def raiser2(): raise Sub(9) #################################### # catch Super and all its subclasses # get raised class/instance from sys #################################### print for func in (raiser1, raiser2): try: func() except Super: import sys print 'caught', sys.exc_type, sys.exc_value #################################### # catch Super and all its subclasses # get raised instance as extra data #################################### print for func in (raiser1, raiser2): try: func() except Super, instance: print 'caught', instance.__class__, instance.errno if instance.__class__ == Sub: print 'extra call', instance.extra()