0

我不知道为什么我以前从未想过这个......但我想知道是否有一种更简洁/更短/更有效的错误处理用户输入的方式。例如,如果我要求用户输入“hello”或“goodbye”,而他们输入了其他内容,我需要它来告诉用户它错了并再次询问。

对于我做过的所有编码,这就是我所做的(通常问题更好):

choice = raw_input("hello, goodbye, hey, or laters? ") 

while choice not in ("hello","goodbye","hey","laters"):

   print "You typed something wrong!"

   choice = raw_input("hello,goodbye,hey,or laters? ")

有没有更聪明的方法来做到这一点?还是我应该坚持我的经历?这是我用于编写的所有语言的方法。

4

4 回答 4

4

对于一个简单的脚本,你拥有它的方式很好。

对于更复杂的系统,您正在有效地编写自己的解析器。

def get_choice(choices):
  choice = ""
  while choice not in choices:
      choice = raw_input("Choose one of [%s]:" % ", ".join(choices))
  return choice

choice = get_choice(["hello", "goodbye", "hey", "laters"])
于 2013-10-16T16:04:38.223 回答
1

如果您修改代码以始终进入while循环,则只需raw_input一行。

while True:
    choice = raw_input("hello, goodbye, hey, or laters? ")
    if choice in ("hello","goodbye","hey","laters"):
        break
    else:
        print "You typed something wrong!"
于 2013-10-16T16:01:14.327 回答
1

你可以用递归来做到这一点

>>> possible = ["hello","goodbye","hey"]
>>> def ask():
...     choice = raw_input("hello,goodbye,hey,or laters? ")
...     if not choice in possible:
...         return ask()
...     return choice
... 
>>> ask()
hello,goodbye,hey,or laters? d
hello,goodbye,hey,or laters? d
hello,goodbye,hey,or laters? d
hello,goodbye,hey,or laters? hello
'hello'
>>> 
于 2013-10-16T16:03:13.777 回答
0

你就是这样做的。将选项列在列表中可能会更漂亮,但这取决于您使用它的方式。

options = ["hello", "goodbye", "hey", "laters"]
while choice not in options:
    print "You typed something wrong!"
于 2013-10-16T16:00:53.203 回答