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

Discord机器人JSON文件KeyError问题求助:KeyError: '370034734186758173'

解决XP排行榜中的KeyError问题

嘿,这个KeyError问题我太熟了——说白了就是你代码在找'370034734186758173'这个用户ID时,发现它根本不在你的JSON数据里,或者你找它的方式不对。咱们一步步来排查修复:

1. 先确认JSON数据的核心问题

首先得搞清楚这个用户ID到底在不在你的JSON文件里:

  • 可能是类型不匹配:比如JSON里的用户ID是数字(370034734186758173),但你代码里用字符串('370034734186758173')去访问,这俩在Python里是完全不同的键,自然会报错。
    • 修复:统一类型就行。要么读取JSON后把所有键转成字符串(比如str(user_id)),要么访问时用和JSON里一致的类型。
  • 也可能这个用户的数据压根没被写入JSON:比如用户刚发言但数据保存逻辑出了问题,没把他的ID加进去。这时候得检查你的数据写入代码,确保所有发言用户的信息都能正确存到JSON里。

2. 给字典访问加个“安全垫”

如果你的代码需要处理可能不存在的用户ID,别直接用data[user_id]这种硬访问方式,试试这俩安全方法:

  • 用字典的get()方法:xp = data.get(user_id, 0),要是键不存在,就返回默认值0(你也可以改成其他合适的默认值,比如初始等级1),不会抛出错误。
  • 用try-except捕获错误:
try:
    user_info = data[user_id]
except KeyError:
    # 键不存在时初始化这个用户的信息
    data[user_id] = {"xp": 0, "level": 1}
    user_info = data[user_id]

3. 检查JSON文件有没有损坏

有时候程序崩溃、写入中断会导致JSON文件损坏,部分数据丢失。你可以:

  • 手动打开JSON文件,搜索370034734186758173,看看它是否存在,格式是不是正确(比如有没有漏逗号、引号)。
  • 读取JSON时加个错误捕获,避免读取损坏的数据:
import json

with open('user_xp.json', 'r') as f:
    try:
        user_data = json.load(f)
    except json.JSONDecodeError:
        # 文件损坏就初始化空字典
        user_data = {}

最后给你个简单的示例代码,展示如何安全读取数据并生成排行榜:

import json

# 安全读取JSON数据
with open('user_xp.json', 'r') as f:
    try:
        user_data = json.load(f)
    except json.JSONDecodeError:
        user_data = {}

# 按XP排序生成排行榜
rankings = sorted(
    [(user_id, info.get('xp', 0)) for user_id, info in user_data.items()],
    key=lambda x: x[1],
    reverse=True
)

# 输出排行榜
print("📊 XP排行榜:")
for rank, (user_id, xp) in enumerate(rankings, 1):
    print(f"{rank}. 用户ID {user_id}:{xp} 经验值")

内容的提问来源于stack exchange,提问作者kami

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:21:20