You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何让try块多次执行直到获取用户合法输入?

问题根因

原代码异常捕获仅生效一次的核心原因:

  1. 异常处理逻辑未搭配循环实现,第一次触发except分支后重新获取的输入没有经过任何类型校验,第二次输入非法值时没有try-except块承接错误,校验直接失效
  2. 类使用逻辑不规范:未实例化team对象,直接修改类本身的属性,不符合面向对象编写规范

原代码连续输入非法值的报错效果:
连续输入非法值后校验失效的运行效果

修复方案

用无限循环包裹「获取输入-类型校验」全流程,每次输入都走异常判断,直到拿到合法整数再退出循环即可,修正后代码如下:

class Team:
    def __init__(self, budget):
        self.budget = budget      

def test_func():
    while True:
        input_content = input("How much money should your baseball team own? ")
        try:
            valid_budget = int(input_content)
            # 校验通过后实例化队伍对象
            return Team(valid_budget)
        except ValueError:
            print("Either you added a dollar sign, put in text or tried something weird. Either way, don't do that.")

if __name__ == "__main__":
    my_team = test_func()
    print(f"Team budget set successfully: {my_team.budget}")
实现逻辑说明
  • while True会持续运行输入流程,只有拿到合法值才会通过return跳出循环
  • 所有轮次的用户输入都会进入try块做整数转换校验,不存在漏判场景
  • 整数转换成功时才会创建Team实例返回结果;只要转换触发ValueError,就打印错误提示,自动进入下一轮输入流程
  • 修正了原代码直接修改类属性的不规范写法,合法预算值通过构造方法传入实例,符合类的设计规范

内容的提问来源于stack exchange,提问作者E_Sarousi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:51:23