如何使 try-except 语句多次捕获错误?[复制]

How do I make a try-except statement catch an error more than once? [duplicate]

提问人:Dillon Teakell 提问时间:7/29/2023 更新时间:7/29/2023 访问量:41

问:

我目前正在制作一个带有菜单的计算器应用程序。当无效的输入(例如。String) 时,将引发异常。ValueError

我有一个阻止来捕获异常。但是,它只会抓住一次。如果我之后执行完全相同的输入,则会引发异常并且不会捕获。try-exceptValueError

我有代码

源语言

def get_user_choice():
    try:
        user_choice = int(input("Choice: "))
    except ValueError:
        print("\nERROR: Please enter a valid integer value. Retrying...\n")
        time.sleep(0.5)
        show_menu()
        user_choice = int(input("Choice: "))
        pass

改 性

如果我把函数放在 而不是要求 ,它会抛出一个 .get_user_choice()exceptuser_choiceUnboundLocalError

try:
        user_choice = int(input("Choice: "))
except (ValueError, UnboundLocalError):
        print("\nERROR: Please enter a valid integer value. Retrying...\n")
        time.sleep(0.5)
        show_menu()
        get_user_choice()
        pass
python 异常 try-catch 值错误

评论


答:

0赞 Jon Zavialov 7/29/2023 #1

将 try-except 移动到循环中。它将继续运行,直到输入有效值并返回。

def get_user_choice():
    while True:
        try:
            user_choice = int(input("Choice: "))
            return user_choice
        except ValueError:
            print("\nERROR: Please enter a valid integer value. Retrying...\n")
            time.sleep(0.5)
            show_menu()

user_input = get_user_choice()

你也可以使用递归:

def get_user_choice():
    try:
        return int(input("Choice: "))
    except ValueError:
        print("\nERROR: Please enter a valid integer value. Retrying...\n")
        time.sleep(0.5)
        show_menu()
        return get_user_choice()

修改后的代码中的问题是未返回该值。