Python中如何让try块多次执行直到获取用户合法输入?
问题根因
原代码异常捕获仅生效一次的核心原因:
- 异常处理逻辑未搭配循环实现,第一次触发except分支后重新获取的输入没有经过任何类型校验,第二次输入非法值时没有try-except块承接错误,校验直接失效
- 类使用逻辑不规范:未实例化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
相关产品推荐
相关产品推荐

