# File: except6a.py # Program to read in a positive number # and complain when the input isn't that # uses a global to convey error occurred # # Matt Bishop, MHI 289I, Winter 2018 # True if error encountered when something read; # False otherwise err = False # read in a positive number # def getposnumber(): global err # read the input and convert it to an integer # notice we do *not* catch the error here; it # is to be caught by the caller try: n = int(raw_input("type a number: ")) except ValueError: print "ValueError in getposnumber()" n = 0 err = True # now just return it return n # # the program itself # def main(): global err # # loop to show exception handling # while True: # read in a positive integer # handle any exceptions (relatively) intelligently try: err = False n = getposnumber() # exception: bad value (string, invalid number) except ValueError as msg: print msg, "-- try again!" # give it another chance # exception: end of file except EOFError as msg: print msg, "-- bye!" # quit break # some other exception except: print "Unknown exception -- ignoring!" # ignore the problem # no exception -- print the number else: if err == True: pass elif n <= 0: print "You typed a non-positive number" else: print "Read", n finally: print "\n-----------------------\n" main()