#!/usr/local/bin/python # http://www.bagley.org/~doug/shootout/ import sys HI = 0 LO = 0 class Hi_exception: def __init__(self, value): self.value = value def __str__(self): return `self.value` class Lo_exception: def __init__(self, value): self.value = value def __str__(self): return `self.value` def some_function(num): try: hi_function(num) except: raise "We shouldn't get here (%s)" % sys.exc_info()[0] def hi_function(num): global HI try: lo_function(num) except Hi_exception, ex: HI += 1 #print 'Hi_exception occurred, value:', ex.value def lo_function(num): global LO try: blowup(num) except Lo_exception, ex: LO += 1 #print 'Lo_exception occurred, value:', ex.value def blowup(num): raise (((num & 1) and Lo_exception) or Hi_exception)(num) def main(): global LO, HI NUM = int(sys.argv[1]) if NUM < 1: NUM = 1 for i in xrange(NUM-1,-1,-1): some_function(i) print "Exceptions: HI=%d / LO=%d" % (HI, LO) main()