I'm developing a program where the user enters a data, then I have to check if the value is a number to proceed with the operation, but if he enters a non-numeric value he is alerted about the invalid value.
I tried to use the
type() function but it checks the variable type and not its value, so it's difficult given the fact that the
input() function returns the input as a string .
case = input(escolha um valor de 0 a 10) if type(case) != int: print("Digite apenas numeros!") else: #--processo
I thought of formatting the
int() but if the user were to type a non-numeric character the program will give an error, when in fact I would like to handle this by asking her to type only numbers.
Python strings have an "isdigit" method:
case.isdigit() – which returns True or False.
This method is enough if you only want positive integers – however, if you also want to validate input of numbers with decimal or negative points, the best thing is to make a function that tries to convert the number inside a
try...except and call that function to check. Then with the minimum of code, you start to accept all syntax variants for numbers (negative, in exponential notation, infinity, etc…):
def isnumber(value): try: float(value) except ValueError: return False return True ... if isnumber(case): ...
This method has the following side effect which is sometimes desirable but sometimes not: it validates all possible ways of representing a float in Python – not only the presence of sign and decimal point, but also scientific notation and the values special "NaN" (not a number), "inifinity" (infinity or infinity) and scientific notation – which allows specification of the decimal point position with the prefix "e":
>>> [float(exemplo) for exemplo in ("infinity", "NaN", "1.23e-4")] [inf, nan, 0.000123]
If that's not desired, a function that does both validations might be better – first detects the characters – and then uses the conversion to
float so you don't have to worry about whether the number is valid (ie: just a decimal point, the sign is the first character, etc…):
def is_simple_number(value): if not value.strip().replace('-', '').replace('+', '').replace('.', '').isdigit(): return False try: float(value) except ValueError: return False return True
Strings in Python also have
isdecimal methods – but they are synonymous with
isdigit – neither method accepts decimal point or sign, for example.