如果用户输入字符串,则python给出选项

Fav*_*las 0 python

我正在使用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) + ': ')
Run Code Online (Sandbox Code Playgroud)

如果用户只输入数字,一切正常,但如果用户输入错误并输入,例如q,它会给出:

NameError:未定义名称"q"

我想,如果用户插入一个字符串,while循环开始并给用户:该选项无效....如何在不使用raw_input的情况下解决这个问题,因为宽度和高度我想将tham视为数字?

问候,

Favolas

编辑 继Daniel建议之后,我将代码修改为:

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

如果用户只输入int代码按计划工作,但不能防止用户错误.如果用户出错并输入"q",则会出现此错误:

ValueError: invalid literal for int() with base 10: 'q'
Run Code Online (Sandbox Code Playgroud)

我理解为什么但是如何解决这个问题?

问候,

Favolas

Dan*_*olo 5

必须使用raw_input而不是inputPython 2.x. input假设用户正在输入要评估的有效Python.您最好的选择是获取字符串输入,然后根据需要进行转换.在这种情况下,您将尝试使用转换int.

提醒一下,从文档中:

input([prompt])

相当于eval(raw_input(prompt)).

警告:此功能不安全,不会出现用户错误!它期望一个有效的Python表达式作为输入; 如果输入语法无效,SyntaxError则会引发a.如果评估期间出现错误,可能会引发其他异常.(另一方面,有时这正是您编写专业用途的快速脚本时所需要的.)