Python Discord Bot笔记命令报错:TypeError: quote_from_bytes() expected bytes
问题解决:Discord机器人笔记命令报错处理
报错原因分析
- 键类型不兼容:Replit Database要求键必须是字符串或字节类型,但你直接用
ctx.author(Discord用户对象)作为键,urllib在处理非字符串键时触发类型错误。 - 条件判断逻辑错误:
if note_add.lower() == "note" or "see"的写法等价于if (note_add.lower() == "note") or True,导致无论输入什么内容,都会执行读取笔记的分支,进一步触发键类型的报错。
修复代码
# 假设已完成导入、bot初始化等前置代码(前缀为!) @bot.command() async def note(ctx, *, note_add): # 使用用户ID的字符串形式作为数据库键,唯一且符合类型要求 author_key = str(ctx.author.id) # 修正条件判断逻辑,准确匹配查看指令 if note_add.lower() in ["note", "see"]: # 读取前先判断键是否存在,避免无笔记时的报错 if author_key in db: note_text = db[author_key] await ctx.send(f"你的笔记:{note_text}") print(note_text) else: await ctx.send("你还没有创建笔记!") else: # 存储笔记 db[author_key] = note_add await ctx.send("笔记已保存!")
修复说明
- 用
str(ctx.author.id)替代ctx.author作为数据库键,既保证唯一性,又符合Replit DB的键类型要求。 - 修正条件判断为
note_add.lower() in ["note", "see"],精准匹配查看指令。 - 添加键存在性检查,避免用户查看未创建的笔记时触发新报错。
- 增加机器人回复,让用户直观看到操作结果(原代码仅后台print,用户无反馈)。
内容的提问来源于stack exchange,提问作者Marijn Klasens
相关产品推荐
相关产品推荐

