Python check for integer input

2019-01-29 02:34发布

问题:

I am trying to allow a user to input into my program, however when they enter a string my program fails. It is for a bigger program but was trying to correct the problem, I have so far:

data = raw_input('Enter a number: ')
number = eval(data)
if type(number) != int:
     print"I am afraid",number,"is not a number"
elif type(number) == int:
    if data > 0:
        print "The",number,"is a good number"
    else:
        print "Please enter a positive integer"

when the user enters a string, it returns:

number = eval(data)
  File "<string>", line 1, in <module>
NameError: name 'hel' is not defined

Any help would be most appreciated.

回答1:

You're using eval, which evaluate the string passed as a Python expression in the current context. What you want to do is just

data = raw_input('Enter a number: ')
try:
    number = int(data)
except ValueError:
    print "I am afraid %s is not a number" % data
else:
    if number > 0:
        print "%s is a good number" % number
    else:
        print "Please enter a positive integer"

This will try to parse the input as an integer, and if it fails, displays the error message.



回答2:

You can just use int(raw_input()) to convert the input to an int.

Never evaluate untrusted user input using eval, this will allow a malicious user to take over your program!



回答3:

Why is no one mentioning regular expressions ? The following works for me, adjust the regex to fit your needs.

[aesteban@localhost python-practice]$ cat n.py 
import re

userNumber = '' 

while not re.match('^-?[0-9]*\.?[0-9]+$',userNumber):
  userNumber = raw_input("Enter a number please: ")

newNumber = float(userNumber) + 100

print "Thank you!! Your number plus 100 is: " + str(newNumber)

Tests:

[aesteban@localhost python-practice]$ python n.py 
Enter a number please: I want to make $200 an hour.
Enter a number please: ok ok...
Enter a number please: 200
Thank you!! Your number plus 100 is: 300.0
[aesteban@localhost python-practice]$ python n.py 
Enter a number please: -50
Thank you!! Your number plus 100 is: 50.0
[aesteban@localhost python-practice]$ python n.py 
Enter a number please: -25.25
Thank you!! Your number plus 100 is: 74.75