# File: except8.py # Program to read in a positive number # and complain when the input isn't that # # Matt Bishop, MHI 289I, Fall 2021 # read in a positive number # raise a ValueError if input is not positive # def getposnumber(): # 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 n = int(input("type a number: ")) # okay, it's an int -- if it's a nonpositive one, complain if n < 0: raise ValueError("You entered a negative number") elif n == 0: raise ValueError("You entered 0") # now just return it return n # # loop to show exception handling # while True: # read in a positive integer # handle any exceptions (relatively) intelligently try: 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 n <= 0: print("You typed a non-positive number") else: print("Read", n) finally: print("\n-----------------------\n")