Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple Python input error

I'm trying to write a code to edit a list and make it a palindrome.

Everything is working except my input still gives me one error. When I enter a non-int into get_number_2, it crashes.

def get_number():
    num = raw_input("Please enter number between 100,000 and 1,000,0000: ")
    if not num.isdigit():
        print "---------------------------"
        print "Invalid input: numbers only"
        print "---------------------------"
        my_main()
    else:
        return num

def get_number_2(n):
    num = input("Please confirm the number you have entered: ")
    if num != int(n):
        print "--------------------"
        print "Entries do not match"
        print "--------------------"
        my_main()
    else:
        return num

I use the input from get_number_2 for the rest of the code as get_number doesn't work when I check if its between two numbers.

Is there any way i can validate if input is an int in get_number_2 so that I can get rid of get_number?

like image 538
S_Sull Avatar asked Oct 22 '15 16:10

S_Sull


2 Answers

Write program that handles exception. If user enters not valid integer, it throws ValueError exception:

try:
    a = int(b)
except ValueError:
    print "Unable to interpret your input as a number"

you must update your question like this:

def get_number_2(n):
    num = input("Please confirm the number you have entered: ")
    try:
        if num != int(n):
            print "--------------------"
            print "Entries do not match"
            print "--------------------"
            my_main()
        else:
            return num
    except ValueError:
        print "Unable to interpret your input as a number"
like image 60
kakajan Avatar answered Oct 26 '22 00:10

kakajan


You also should use raw_input and int(num):

def get_number_2(n):
    num = raw_input("Please confirm the number you have entered: ")
    if not num.isdigit() or int(num) != n:
        print "--------------------"
        print "Entries do not match"
        print "--------------------"
        my_main()
    else:
        return int(num)

Notes:

  • I assume that the parameter n is an int, or to check this you could change the if to: if not num.isdigit() or not n.isdigit() or int(num) != int(n).
  • By using isdigit we check if it is an integer before really converting it to int.
like image 40
agold Avatar answered Oct 26 '22 01:10

agold