代码运行报KeyError: 0错误,求助可行的修复方案
解决KeyError: 0的问题
嘿,我一眼就揪出问题所在啦!你的student_scores字典里的键是字符串类型的'0'和'1',但你在循环里用整数i(0、1)去访问student_scores[i]——字典里根本没有整数0这个键,这不就直接抛出KeyError了嘛!
咱们来一步步把问题搞定:
问题核心
当你写for v in student_scores时,Python默认会遍历字典的键(也就是'0'、'1'),但你却用整数计数器i去当键取值,类型不匹配肯定找不到对应的键值对。
修复方案1:直接遍历字典键值对(最简洁)
不用额外的计数器i,直接用items()方法同时拿到键和值,代码逻辑更清晰:
student_scores = {'0':65.0, '1':54.7} student_names = ['Alice', 'Bob'] # 假设这是你的学生名单 average_score = 66.0 above_avg = [] # 遍历键值对,同时通过索引对应student_names for idx, (key, score) in enumerate(student_scores.items()): if score >= average_score: above_avg_check = "{} {}".format(student_names[idx], score) above_avg.append(above_avg_check) print(above_avg_check)
修复方案2:适配原思路,转换计数器类型
如果你想保留原来用计数器的逻辑,只需要把整数i转成字符串再当键用就行:
student_scores = {'0':65.0, '1':54.7} student_names = ['Alice', 'Bob'] average_score = 66.0 above_avg = [] i = 0 for v in student_scores: # 把i转成字符串,匹配字典的键类型 if student_scores[str(i)] >= average_score: above_avg_check = "{} {}".format(student_names[i], student_scores[str(i)]) above_avg.append(above_avg_check) print(above_avg_check) i += 1
额外小提醒
其实字典在Python 3.7之前是无序的(3.7+才保留插入顺序),如果你的student_names和student_scores是严格按顺序对应的,更推荐用列表存储学生信息,比如students = [('Alice',65.0), ('Bob',54.7)],这样遍历起来更不容易踩类型匹配的坑哦!
内容的提问来源于stack exchange,提问作者Connor Thompson
相关产品推荐
相关产品推荐

