如果输入错误或没有错误,脚本会崩溃

时间:2013-06-20 22:17:03

标签: python

这是一个简单的菜单。如果输入错误的数字或没有任何脚本崩溃。

print "1) menu 1"
print "2) menu 2"
print "q) quit"

choice = raw_input("?> ")

while choice is not 'q' or 'Q':

脚本正在从这里循环打印消息

    if choice == '1':   
        print "menu1" 

这里的循环

    elif choice == '2':
        print "menu2"  

    else:
        print "invalid choice"
        # want to start the input question again from here

print "breaked out of the loop" 

2 个答案:

答案 0 :(得分:3)

while choice is not 'q' or 'Q':被解析为

while (choice is not 'q') or 'Q':

因此,无论choice的值如何,Q作为非空字符串都将评估为true。由于您永远不会更改循环中choice的值,因此它永远不会终止。你想要更像

的东西
choice = ''
while choice not in ['q', 'Q']:
    print "1) menu 1"
    print "2) menu 2"
    print "q) quit"

    choice = raw_input("?> ")
    if choice == "1":
        print "You chose 1"
    elif choice == "2":
        print "You chose 2"

为什么您不想使用is not

>>> foo = 'Q'.lower()
>>> foo
'q'
>>> foo == 'q'
True
>>> foo is 'q'
False

关于确定choice是大写还是小写的其他建议变体':选择您认为最具可读性的变体。你的程序将花费更多的时间等待你按下一把钥匙而不是用来确定它是哪一把钥匙,所以不要担心哪一个比其他钥匙快一秒。

答案 1 :(得分:2)

您应该使用else子句来捕获任何无效选项:

print "1) menu 1"
print "2) menu 2"

choice = raw_input("?> ")

if choice == 1:   
     print "menu1" 
elif choice == 2:
    print "menu2
else:
    print "Not a valid choice."

您还可以使用while循环继续重复,直到做出有效选择。