You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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自动处理嵌套字典初始化

适合高频操作多层嵌套字典的场景,不用每次手动判断中间键是否存在:

  1. 先导入依赖:
    from collections import defaultdict
  2. 定义users时设置嵌套的默认字典结构:
    users = defaultdict(lambda: defaultdict(dict))
  3. 直接赋值即可,不需要手动初始化中间层:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 08:48:01