Python try/except块多尝试查询时有效输入仍触发异常问题排查
问题原因
- 原代码
try块内的for循环逻辑存在错误:会强制依次查询d1、d2两个字典,只要任意一次查询失败就会触发全局异常。 - 当输入合法字母等级时,在
d1中查询成功后,仍会继续查询d2,而d2的键均为绩点值,不存在对应的字母等级键,必然触发KeyError进入异常分支。 - 当输入合法绩点时,首先查询
d1就会失败,直接触发异常,不会执行后续d2的查询逻辑。
修复方案
调整查找逻辑:优先尝试字母转绩点的查询,失败后再尝试绩点转字母的查询,两次查询均失败才判定为输入无效。修复后代码如下:
d1 = { 'A+': '4.0', 'A-': '3.7', 'B+': '3.3', 'B': '3.0', 'B-': '2.7', 'C+': '2.3', 'C': '2.0', 'C-': '1.7', 'D+': '1.3', 'D': '1.0', 'F': '0', } # 用字典推导式简化反向字典生成逻辑 d2 = {value: key for key, value in d1.items()} s = input('Enter a grade point: ') while s != '': s = s.upper() # 依次查询两个字典,任意查询成功则取值,否则返回None gp = d1.get(s) or d2.get(s) if gp: print(gp) else: print('Invalid input') s = input('Enter a grade point: ')
内容的提问来源于stack exchange,提问作者Zy Taga
相关产品推荐
相关产品推荐

