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
相关产品推荐
相关产品推荐

