Search code examples
pythontry-except

How do I proper implement try-except into this program?


I am taking an introduction to Python course and I cannot figure out how to add some try-except code to catch exceptions like zerodivisionerror and keyboardinterrupt. Full code below:

def math():
    x = float(0)
    Flag = True
    while(Flag):

        low_rng = input("Select your Lower range :")
        hi_rng = input("Select your Higher range :")
        num_1 = input("Enter your first number :")
        num_2 = input("Enter your second number :")
        add = float(num_1) + float(num_2)
        sub = float(num_1) - float(num_2)
        mult = float(num_1) * float(num_2)
        div = float(num_1) / float(num_2)



        def IsInRange():

            if float(num_1) < float(low_rng) or float(num_2) > float(hi_rng):
                print("The input values are out side the input ranges.") 
                print("Please check the numbers and try again.")
                print("Thanks for using our calculator.")
                IsInRange = False

            else:
                try:
                    print("The result of " + num_1 + " + "  + num_2 + " is " + str(add))
                    print("The result of " + num_1 + " - "  + num_2 + " is " + str(sub))
                    print("The result of " + num_1 + " * "  + num_2 + " is " + str(mult))
                    print("The result of " + num_1 + " / "  + num_2 + " is " + str(div))
                    IsInRange = True
                except ZeroDivisionError:
                    print("You can not divide by zero!")
                except KeyboardInterrupt:
                    print("User Interruption!")


        IsInRange()
        cont = input('Continue Looping y/n ')
        if(cont=="n"):
            print ("Ending loop")
            print("Done")
            Flag = False
        continue
math()

Solution

  • the print statements are not the place where exceptions happen. ZeroDivisionError happens in

    div = float(num_1) / float(num_2)
    

    KeyboardInterrupt can happen any time after app started.

    so try-except KeyboardInterrupt for the whole while block.

    try 
        while(Flag):
            ....
    except KeyboardInterrupt
        ...
    

    and try-except ZeroDivisionError for the division statement.

    try 
        div = float(num_1) / float(num_2)
    except ZeroDivisionError 
        ...