首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重复try-except块

如何重复try-except块
EN

Stack Overflow用户
提问于 2013-03-06 03:28:46
回答 2查看 25.2K关注 0票数 17

我在Python3.3中有一个try-except块,我想让它无限期运行。

代码语言:javascript
复制
try:
    imp = int(input("Importance:\n\t1: High\n\t2: Normal\n\t3: Low"))
except ValueError:
    imp = int(input("Please enter a number between 1 and 3:\n> ")

目前,如果用户输入一个非整数,它将按计划工作,但是如果他们再次输入它,它只会再次引发ValueError并崩溃。

解决这个问题的最好方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-06 03:30:13

把它放在一个while循环中,当你得到你想要的输入时就中断。如下所示,最好让所有代码都依赖于try中的imp,或者为它设置一个默认值,以防止NameError的进一步下降。

代码语言:javascript
复制
while True:
  try:
    imp = int(input("Importance:\n\t1: High\n\t2: Normal\n\t3: Low"))

    # ... Do stuff dependant on "imp"

    break # Only triggered if input is valid...
  except ValueError:
    print("Error: Invalid number")

编辑:user2678074指出,这可能会使调试变得困难,因为它可能会陷入无限循环。

我会提出两个建议来解决这个问题--首先使用一个具有定义的重试次数的for循环。其次,将上面的代码放在一个函数中,这样就可以将它与应用程序逻辑的其余部分分开,并将错误隔离在该函数的作用域内:

代码语言:javascript
复制
def safeIntegerInput( num_retries = 3 ):
    for attempt_no in range(num_retries):
        try:
            return int(input("Importance:\n\t1: High\n\t2: Normal\n\t3: Low"))
        except ValueError as error:
            if attempt_no < (num_retries - 1):
                print("Error: Invalid number")
            else:
                raise error

有了它,你就可以在函数调用的外部进行try/except,并且只有当你超过最大重试次数时,它才会通过。

票数 36
EN

Stack Overflow用户

发布于 2013-03-06 03:37:21

代码语言:javascript
复制
prompt = "Importance:\n\t1: High\n\t2: Normal\n\t3: Low\n> "
while True:
    try:
        imp = int(input(prompt))
        if imp < 1 or imp > 3:
            raise ValueError
        break
    except ValueError:
        prompt = "Please enter a number between 1 and 3:\n> "

输出:

代码语言:javascript
复制
rob@rivertam:~$ python3 test.py 
Importance:
    1: High
    2: Normal
    3: Low
> 67
Please enter a number between 1 and 3:
> test
Please enter a number between 1 and 3:
> 1
rob@rivertam:~$
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15232465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档