Python Forum

Full Version: catch input type error
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I am trying to get this script to only accept integers.
number = int(input("Enter a number. "))
if isinstance(number, str):
    print("Entry must be a number")
I have also tried:
if type(number) is str:
    print("Entry must be a number")
I enter a and keep getting:
Error:
ValueError: invalid literal for int() with base 10: 'a'
Why dosen't this catch the error?
input() returns you a string and you need to check if all characters in that string are in '0123456789'
as only then int() can convert that string into a number.
import re
number = input("Enter a number: ")
if not re.match("^[0-9]*$", number):
    print("Entry must be a number")
You can put this in a while loop to continue asking for input until it accepts the syntax. Was in a similar situation a few days ago and a quick google search got me the answer. You should also download the Python pdf on your phone or comp :)
(Aug-10-2019, 06:21 AM)mcmxl22 Wrote: [ -> ]Why dosen't this catch the error?

Because input is throwing an exception (i.e. the ValueError) and you don't have any exception handling code (i.e. a try and catch).

Note that throwing is not the same as returning - when an exception is thrown, the function is exited in a different way. No value is returned, so you have to handle the failure in a different way (that is, using the exception handling mechanism). This is one reason one might choose to work in a more functional language - if the functions are pure and so can only return values, then there's only a single flow of execution and handling failures just sits inside that like everything else.
(Aug-10-2019, 07:23 AM)ndc85430 Wrote: [ -> ]
(Aug-10-2019, 06:21 AM)mcmxl22 Wrote: [ -> ]Why dosen't this catch the error?
Because input is throwing an exception

No, it´s the int() function that throws the exeption as the string 'a' cannot be converted into an integer number.
Quote:ValueError: invalid literal for int() with base 10: 'a'
Just convert the input string to an integer and catch the error if there is any.
You can look at str.isdigit() and str.isnumeric() methods as well