Question

I want to prompt the user with a separate exception error if they have entered a float over any other invalid string. Currently I get the same error if a string like "hello" is entered or a float like 2.5. Which exception should I be using just to filter float values? Thanks

print('Enter 1 for option 1')
print('Enter 2 for option 2')
print('Enter 3 for option 3')
print('Enter 4 to quit')

flag = True
x = -1
while(flag):

        try:
            x  = (int(input('Enter your choice: ')))
            if((x >= 1) and (x <= 4)):
                flag = False
                x = x
            else:
                print('The number should be between 1 and 4')
        except TypeError:
            print('Choice should be an integer not a float')
        except ValueError:
            print('Choice should be a number')
        except NameError:
            print('Choice should be a number')
Was it helpful?

Solution

The issue you're having is due to int raising the same exception for all invalid strings, whether they represent floats or just random text. Here's one way you could solve that:

while True:
    try:
        s = input("Enter a number 1-4")
        x = int(x)      # this will raise a ValueError if s can't be made into an int
        if 1 <= x <= 4:
            break
        print("The number must be between 1 and 4")
    except ValueError:
        try:
            float(s)    # will raise another ValueError if s can't be made into a float
            print("You must enter an integer, rather than a floating point number.")
        except ValueError:
            print("You must enter a number.")

OTHER TIPS

Hmm... how about this?

x = input('Enter your choice: ')
if float(x) != int(x):
    raise TypeError
x = int(x)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top