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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:27:00