为何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')
关键修正点
- 给范围校验表达式添加了逻辑分支,确保超范围时触发错误提示
- 简化了等级判断逻辑——既然已经校验过分数在0-100区间,后续判断无需重复写上下限,代码更简洁
内容的提问来源于stack exchange,提问作者Rambo
相关产品推荐
相关产品推荐

