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

Discord机器人开发报TypeError: in <string>左操作数需为字符串而非列表如何解决

错误成因
  • 直接触发报错的是消息判断行的语法问题:in关键字做字符串包含判断时要求左操作数为字符串类型,你将列表类型的greetings直接作为左操作数,不符合语法规则,抛出对应类型错误。
  • 响应发送行也存在语法错误:await message.channel.send(greetingresponse)[greetingnumber]将下标索引写在send方法外部,会先尝试把整个响应列表作为消息发送,再对send方法的返回值取索引,逻辑完全错误。
  • 额外存在逻辑瑕疵:你在全局作用域生成greetingnumber,机器人启动时只会生成一次随机数,后续所有问候触发的回复都会是同一个固定内容,无法实现随机响应的效果。
修复方案

你可以直接替换消息判断及响应逻辑部分的代码为如下内容:

# 把随机数生成移到判断逻辑内部,每次触发都生成新的随机值
if any(word in message.content.lower() for word in greetings):
    greetingnumber = random.randint(0, len(greetingresponse)-1)
    await message.channel.send(greetingresponse[greetingnumber])

调整说明

  • 用any()函数遍历问候语列表,判断是否存在任意一个问候词出现在用户消息内容中,符合语法要求。
  • 把随机数生成移到判断逻辑内部,每次触发问候时都会生成新的随机下标,实现每次回复随机的效果。
  • 修正了下标索引的位置,先从greetingresponse中取出对应下标的响应内容,再传入send方法发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:30:05