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

Replit Python数据库调用抛出TypeError: quote_from_bytes() expected bytes求助

问题修复方案

错误根因

  • Replit Python 数据库的键仅支持字符串、字节两种类型,你代码中直接传入 ctx.author (discord.py 返回的 Member/User 类型对象)作为数据库键,数据库内部序列化处理键时无法识别该对象类型,触发 类型错误:quote_from_bytes() 期望传入字节类型参数 报错。
  • 原 loadAll 函数存在冗余逻辑,重复执行了两次用户存在性校验。

代码修改

优化loadAll函数

def loadAll(user_id: str):
    if user_id not in db:
        db[user_id] = {}
    return db[user_id]

调整业务调用逻辑

@bot.command(name = "getMyData")
async def getUserData(ctx):
    await ctx.send(ctx.author)
    # 取用户唯一的数字ID转为字符串作为数据库键,避免重复和序列化问题
    user_key = str(ctx.author.id)
    user_data = loadAll(user_key)
    # 字典转字符串后再发送,避免discord.py类型不兼容报错
    await ctx.send(str(user_data))

注意事项

  • 禁止直接使用用户对象、用户昵称作为数据库键:昵称可重复,用户对象无法被数据库序列化,唯一且永久不变的用户ID是最优的键值选择。
  • 向Discord频道发送字典、列表等非字符串类型数据时,需要先转为字符串格式,否则discord.py会抛出参数类型不兼容错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:54:03