我正在使用Python 2.6.6
我有这段代码:
height = 20
width = 10
x = input('Please insert a number between ' + str(width + 1) + ' and ' + str(height) + ': ')
while x < (width + 1) or x > 20:
print 'That option is not valid'
x = input('Please insert a number between ' + str(width + 1) + ' and ' + str(height) + ': ')
如果用户只输入数字,一切正常,但如果用户输入错误并输入,例如q,则会显示:
NameError:名称'q'未定义
我想,如果用户插入一个字符串,while循环就会启动并给用户:该选项无效.... 如何在不使用raw_input的情况下解决这个问题,因为宽度和高度我想将其视为数字?
此致
Favolas
修改 根据丹尼尔的建议,我已将我的代码修改为:
height = 20
width = 10
x = raw_input('Please insert a number between ' + str(width + 1) + ' and ' + str(height) + ': ')
x = int(x)
while x < (width + 1) or x > 20:
print 'That option is not valid'
x = raw_input('Please insert a number between ' + str(width + 1) + ' and ' + str(height) + ': ')
x = int(x)
如果用户只输入int代码按计划工作,但不能防止用户错误。如果用户犯了错误并键入'q',则会出现此错误:
ValueError: invalid literal for int() with base 10: 'q'
我理解为什么但是如何解决这个问题?
此致
Favolas
答案 0 :(得分:5)
你必须在Python 2.x中使用raw_input
而不是input
。 input
假定用户正在输入要评估的有效Python。您最好的选择是获取字符串输入,然后根据需要进行转换。在这种情况下,您需要尝试使用int
进行转换。
提醒一下,from the documentation:
input([prompt])
相当于
eval(raw_input(prompt))
。警告:此功能不安全,不会出现用户错误!它期望一个有效的Python表达式作为输入;如果输入语法无效,则会引发
SyntaxError
。如果评估期间出现错误,可能会引发其他异常。 (另一方面,有时这正是您编写专业用途的快速脚本时所需要的。)