Python字典通过索引或键访问时出现KeyError问题求助
问题:Python中访问字典触发KeyError的解决办法
我通过WebSocket成功接收了格式正确的JSON数据,代码如下:
while True: result = ws.recv() result = json.loads(result)
我用遍历的方式可以输出键和对应的值:
for i in result: print(i) print(result[i])
这会打印出"Valid_Key"和"Some_value",但当我尝试直接通过索引或键名访问时,却触发了KeyError:
print(result[0])报错:KeyError: 0print(result["Valid_Key"])报错:KeyError: 'Valid_Key'
请问该怎么正确通过索引或键访问字典数据?
解决思路和办法
兄弟,你这情况大概率是被JSON解析后的实际数据结构给坑了!看起来遍历能拿到键值,但直接访问报错,无非两种常见原因:
1. 解析后的数据不是单层字典,是列表套字典(或多层嵌套)
你遍历的时候看到的"Valid_Key",可能根本不是最外层结构的键,而是外层列表里某个字典的键。比如解析后的result实际是这样的:
# 示例结构 [ {"Valid_Key": "Some_value"} ]
这时候for i in result其实是遍历列表里的字典元素,而你看到的"Valid_Key"可能是遍历字典键时的输出(比如你实际写的是for i in result[0]:)。
不管怎样,先排查数据类型和完整结构:
print(type(result)) # 先看是dict还是list print(result) # 打印完整的解析后数据,一目了然
如果是列表结构,那得先取列表元素再访问键:
# 假设result是列表,取第一个元素再访问键 print(result[0]["Valid_Key"])
2. 键名存在肉眼不可见的差异
如果result确实是单层字典,但直接用键访问报错,那大概率是键名有隐藏空格、大小写差异或者特殊字符。比如实际键是"Valid_Key "(末尾多了空格),或者"valid_key"(全小写),肉眼看着和你写的一样,但实际字符串不匹配。
这时候可以打印所有键的真实样子:
print(list(result.keys()))
对比输出的键和你写的"Valid_Key"是否完全一致,就能找到问题所在。
总结步骤
- 先确认解析后的数据类型(用
type(result)) - 打印完整数据结构,明确键所在的层级
- 检查键的真实字符串,排除大小写、隐藏字符等问题
内容的提问来源于stack exchange,提问作者Selzier
相关产品推荐
相关产品推荐

