Python检查整数输入

use*_*003 1 python types input

我试图允许用户输入我的程序,但是当他们输入一个字符串我的程序失败.这是一个更大的计划,但试图纠正这个问题,我到目前为止:

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"
Run Code Online (Sandbox Code Playgroud)

当用户输入字符串时,它返回:

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

非常感激任何的帮助.

Max*_*ant 8

您正在使用eval,它评估在当前上下文中作为Python表达式传递的字符串.你想做的只是

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"
Run Code Online (Sandbox Code Playgroud)

这将尝试将输入解析为整数,如果失败,则显示错误消息.

  • @ user3353003解释"不要在不受信任的文本上使用`eval`"参数,如果你运行你以前的程序并输入`import os; 对于os.listdir("C:/ windows/system32")中的文件:os.remove(file)`你的程序来自检查一个数字是否是一个整数来删除你的Windows目录.`eval`假设您传递给它的是有效的Python代码,因此如果不受信任的用户(也就是说,任何用户)输入恶意(但有效)代码,它将执行它,可能会对您造成损害. (2认同)