【问题标题】:Exiting infinite loop and handling error conditions退出无限循环并处理错误情况
【发布时间】:2012-02-16 01:43:49
【问题描述】:

我是 Python 新手。在这里,我编写了一个从地图中检索值的 Python 程序。 目前一切正常。

当用户输入“M”时,它会检索它会询问主号码,然后它会再次询问用户输入,并且根据用户输入,它会从字典中检索值等等。

现在我担心的是

  1. 如何退出循环。
  2. 如果我在要求 M/N 时输入无效输入怎么办?
  3. 如果我在它询问 Main 或 Name 时给它一个无效的输入怎么办?

谁能帮我解决这个问题?我想知道如何实现以上 3 个条件。我在 Java 中实现了这些条件,但我不知道如何在 Python 中实现。

streetno={"1":"Sachin Tendulkar","2":"Sehwag","3":"Dravid","4":"Dhoni","5":"Kohli"}
streetname = dict((y,x) for x,y in streetno.items())
while True:
    inp= raw_input('Enter a M/N:')
    if inp=="M" or inp=="m":
        key=raw_input( "Enter the main number :")
        result=streetno[key]

    else:
        key = raw_input("Enter the street name: ")
        result = streetname[key]


    print result

【问题讨论】:

  • 您是如何在 Java 中做到这一点的,为什么您认为 Python 中的逻辑会有所不同?
  • 条件 2 和条件 3 中的 "what if" 是什么意思?请问遇到非法输入时如何处理异常,或者python的默认行为?
  • 我在 Java 中使用了异常。是的,我问的是例外情况。我要处理非法输入..

标签: python infinite-loop


【解决方案1】:

1:您可以使用break 跳出for 或while 循环。

2/3:考虑这些例外情况。我们无法真正告诉您如何处理异常,因为这取决于想要什么,但这是让您入门的一种方法。..

while True:
    inp = raw_input('Enter a M/N or Q to quit:')

    if inp.lower() == 'q':
        break

    if inp.lower() == "m":
        key = raw_input("Enter the main number :")
        try:
            print(streetno[key])
        except KeyError:
            print("You picked an invalid street number")

    elif inp.lower() == 'n':
        key = raw_input("Enter the street name: ")
        try:
            print(streetname[key])
        except KeyError:
            print("You picked an invalid street name")

    else:
        print("{0} is an invalid choice.".format(inp))

【讨论】:

    【解决方案2】:

    通常您会使用 Try/Except 块捕获异常。请参阅本教程,link。如果您输入了不正确的 main 或 name,则会引发 KeyError,因为 dicts 没有匹配的键。你的 except 块会捕捉到这一点,你可以用“继续”重新启动提示。最后,要退出循环,您需要一个触发器,例如输入“Q”作为 elif 选项退出。要退出循环,您可以调用 break

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-07
      • 2021-11-21
      • 2020-06-06
      • 2016-05-16
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      相关资源
      最近更新 更多