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

为何try块中条件判断为False时不触发错误?分数校验逻辑失效

问题原因与解决方案

问题根源

你写的score_int >= 0 and score_int <= 100只是一个孤立的布尔表达式——程序确实计算了这个条件的真假,但没有对结果做任何后续处理:既没有用它触发错误逻辑,也没有用它控制分支走向。

当输入的分数超出0-100范围时,程序不会进入except块输出错误提示:比如输入-5会匹配最后一个elif score_int <=60输出F,输入105则会跳过所有等级分支直接回到循环开头,完全达不到你想要的校验效果。

修正方案

有两种清晰的修正方式,按需选择即可:

方式一:类型转换后单独做范围校验

把类型校验和范围校验分开,逻辑更直观:

while True :
    score_str = input('Enter your numerical score:')
    try:
        score_int = int(score_str)
    except:
        print('Enter a valid number')
        continue

    # 校验分数范围,不满足则提示并重新输入
    if score_int < 0 or score_int > 100:
        print('Enter a valid number')
        continue

    # 简化等级判断(已确保分数在0-100区间,无需重复判断上下限)
    if score_int >= 90:
        print('A')
    elif score_int >= 80:
        print('B')
    elif score_int >= 70:
        print('C')
    elif score_int >= 60:
        print('D')
    else:
        print('F')

方式二:主动抛出异常进入错误分支

如果想把范围校验也放进try块,可以主动抛出异常让except块统一处理:

while True :
    score_str = input('Enter your numerical score:')
    try:
        score_int = int(score_str)
        # 范围不合法时主动抛出异常
        if not (0 <= score_int <= 100):
            raise ValueError
    except:
        print('Enter a valid number')
        continue

    # 同样简化等级判断
    if score_int >= 90:
        print('A')
    elif score_int >= 80:
        print('B')
    elif score_int >= 70:
        print('C')
    elif score_int >= 60:
        print('D')
    else:
        print('F')

关键修正点

  1. 给范围校验表达式添加了逻辑分支,确保超范围时触发错误提示
  2. 简化了等级判断逻辑——既然已经校验过分数在0-100区间,后续判断无需重复写上下限,代码更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:27:45