Python开发Discord Bot时列表拼接后无法新增鼓励语问题求助
问题原因
- 核心为类型不匹配报错,你执行
options + db['encouragements']操作时,options是列表类型,但数据库中存储的encouragements是字符串类型,Python不支持列表和字符串直接拼接,因此触发类型错误。 - 该问题通常由新增自定义鼓励语的存储逻辑错误导致:首次存储鼓励语时没有将内容包装为列表,直接将用户输入的单个字符串存入了数据库,后续读取拼接时就会报错。
解决方案
1. 修正鼓励语存储逻辑
确保所有存入数据库的鼓励语始终为列表格式,新增鼓励语的逻辑参考如下:
# new_encourage 为从Discord消息中获取的用户自定义鼓励语字符串 if "encouragements" in db.keys(): # 读取已有列表,追加新元素后再存回 encourage_list = db["encouragements"] encourage_list.append(new_encourage) db["encouragements"] = encourage_list else: # 首次存储直接初始化包含新内容的列表 db["encouragements"] = [new_encourage]
2. 清理数据库错误数据
如果已经错误存储了字符串类型的encouragements,可以先执行一次删除操作清理错误数据,再重新测试功能:
if "encouragements" in db.keys() and not isinstance(db["encouragements"], list): del db["encouragements"]
3. 优化原有拼接逻辑
可以给原有拼接代码增加类型校验,同时避免修改默认鼓励语列表,提升代码健壮性:
# 复制默认列表,避免后续操作修改原初始列表 options = starter_encouragements.copy() if "encouragements" in db.keys() and isinstance(db["encouragements"], list): options.extend(db["encouragements"])
内容的提问来源于stack exchange,提问作者Takashii
相关产品推荐
相关产品推荐

