输入专辑名称后遍历字典执行键值比较时出现KeyError的问题咨询
问题排查与解决
错误原因
- 变量覆盖+键类型错误:你先用
a存储输入的专辑名,随后又用for a in album_rating.items()循环,items()返回的是(专辑名, 评分)的元组,这时候a被替换成了元组(比如报错里的('Black in Black', 8.5)),再用这个元组去字典里找键,自然找不到,触发KeyError。 - 语法错误:Python的循环关键字是小写
for,你写的For会被识别为未知名称,实际运行时会先报这个错。 - 逻辑偏离需求:你的需求是输入单个专辑名并判断其评分,没必要遍历整个字典,遍历会把所有专辑都判断一遍,不符合预期。
修复后的代码(符合需求的最优写法)
album_rating={"Black in Black":8.5,"Believer":6,"SmackTac":7,"You":9} album_name = input("Enter the name:") # 先检查输入的专辑是否存在 if album_name in album_rating: rating = album_rating[album_name] if rating > 8: print("This album is Amazing!") else: print("Try a different album") else: print("This album isn't in the rating list!") print("Welcome")
代码说明
- 把输入变量改名为
album_name,避免和循环变量冲突(这里直接去掉了不必要的遍历)。 - 增加专辑存在性判断,防止用户输入不存在的名称时再次触发KeyError。
- 完全贴合需求:输入单个专辑名,直接获取对应评分并判断。
可选:遍历实现的写法(不推荐,仅作演示)
如果一定要用遍历方式查找目标专辑,可以这么写,但效率不如直接通过键访问:
album_rating={"Black in Black":8.5,"Believer":6,"SmackTac":7,"You":9} target_album = input("Enter the name:") for album, rating in album_rating.items(): if album == target_album: print("This album is Amazing!" if rating > 8 else "Try a different album") break else: print("This album isn't in the rating list!") print("Welcome")
内容的提问来源于stack exchange,提问作者Hehe
相关产品推荐
相关产品推荐

