Python如何循环执行try-except实现赌注输入持续校验直到输入合法
问题根因
你的代码核心问题是所有try-except块仅执行单次校验,没有嵌套循环逻辑,用户连续两次输入非法值时,第二次的int()转换没有异常捕获就会直接抛出错误。同时多层嵌套的while循环逻辑混乱,比如输入合法正数但超过剩余余额后,后续重新输入的数值不会再校验是否为负数,会出现逻辑漏洞。
修正后代码
def validate_wager(talents): """ 校验用户下注输入,检查非整数、负数、超过余额的输入 """ talents = int(talents) # 输出初始提示 print('{wager:-<34}'.format(wager="How much do you wish to wager? "), end=" ") while True: try: wager = int(input()) # 校验是否为正 if wager <= 0: print("Wager cannot be zero or negative: ", end="") continue # 校验是否不超过剩余余额 if wager > talents: print("Wager cannot be more than remaining talents: ", end="") continue # 所有校验通过,退出循环 break except ValueError: # 捕获非整数输入的异常 print("Wager must be a whole number: ", end="") return wager
逻辑说明
- 用
while True做无限循环,只有所有校验都通过才会执行break退出循环,保证只要输入不合法就会一直要求重新输入 - 所有输入转换逻辑都放在同一个
try块里,只要输入无法转为整数就会触发ValueError异常,输出对应提示后继续循环 - 整数转换成功后依次校验数值范围,不符合要求就输出对应提示,跳过后续逻辑直接进入下一轮循环
- 避免了多层嵌套循环的逻辑混乱,所有校验逻辑线性执行,不会出现漏校验的问题
内容的提问来源于stack exchange,提问作者Alex Grimes
相关产品推荐
相关产品推荐

