Python操作JSON写入cash字段时报KeyError异常问题求助
错误原因
KeyError报错是因为你赋值嵌套字典时,中间层级的键不存在:你仅初始化了users[str(guildb.id)]为空字典,但是users[str(guildb.id)]下还没有str(user.id)对应的键,就直接尝试给这个不存在的键下的cash、bank字段赋值,因此抛出找不到对应键的异常。
解决方案
方案1:手动初始化中间层字典
赋值cash、bank前先给对应用户ID的键初始化空字典即可:
a = users[str(guildb.id)] = {} # 先初始化用户层级的空字典 users[str(guildb.id)][str(user.id)] = {} # 再赋值内部字段 b = users[str(guildb.id)][str(user.id)]["cash"] = 5000 c = users[str(guildb.id)][str(user.id)]["bank"] = 10000
方案2:使用defaultdict自动处理嵌套字典初始化
适合高频操作多层嵌套字典的场景,不用每次手动判断中间键是否存在:
- 先导入依赖:
from collections import defaultdict - 定义
users时设置嵌套的默认字典结构:users = defaultdict(lambda: defaultdict(dict)) - 直接赋值即可,不需要手动初始化中间层:
users[str(guildb.id)] = {} users[str(guildb.id)][str(user.id)]["cash"] = 5000 users[str(guildb.id)][str(user.id)]["bank"] = 10000
如果后续需要将数据写入JSON文件,序列化前要先将defaultdict转为普通字典,避免JSON序列化报错:json.dump(dict(users), open("你的数据文件路径.json", "w"))
内容的提问来源于stack exchange,提问作者Feinz
相关产品推荐
相关产品推荐

