在Python脚本中重试用户输入

时间:2015-06-23 04:26:22

标签: python

如果我在Python脚本中提交一个简单的错误,我正试图弄清楚是否有办法“强迫”Python脚本“不再”回到bash环境中。

这是一个MWE(MWE.py)来说明这一点:

如果我在下面的MWE中按3,你怎么能告诉Python不要让我退出程序?

x = raw_input("Please input a number 1 or 2: ")
if (x == '1'):
    print '1'
elif (x == '2'):
    print '2'
#else:
    #print 'Neither 1 nor 2.'

请注意,我的最后两行已注释掉。如果我取消注释它们,显然我会得到相应的print语句,程序将成功完成。但是,让我们假设我没有最后两行,并希望MWE.py“保持在Python模式”(可以这么说)而不是严厉地让我回到bash shell,从而迫使我从头开始重新运行python MWE.py

有没有办法以某种方式实现这一目标?

显然,这是一个微不足道的MWE,但我正在尝试理解这个原则:是否有可能在我提交输入错误之前返回我提交的最后一个提示(例如我在这个MWE中提交的时候)按3)。是否基本上有一种“通用方式”可以回到x = raw_input("Please input a number 1 or 2: ")(或者在我输入错误之前我最近提示的其他提示)?

这在需要在不同阶段进行多个用户输入的程序中显得特别重要。我不想从头开始。

1 个答案:

答案 0 :(得分:6)

它被称为循环(不需要围绕条件的括号):

x = None

while x != '1' and x != '2':
    x = raw_input("Please input a number 1 or 2: ")
    if x == '1':
        print '1'
    elif x == '2':
        print '2'
    else:
        print 'Neither 1 nor 2.'

print "all OK"

有很多方法可以写这个。您应该注意在循环之前初始化x的方式,None在python中是典型的。

另请注意,x的值是字符串,而不是int

如果您要测试大量可能的值,这很快就会变得难以处理。所以另一种方法是在正确的回复中使用无限循环break

x = None

while True:
    x = raw_input("Please input a number 1 or 2: ")
    if x == '1':
        print '1'
        break
    elif x == '2':
        print '2'
        break
    else:
        print 'Invalid input, try again'

print "all OK"