TypeError:“ bool”对象不可迭代

时间:2018-09-16 16:17:22

标签: python python-3.x discord discord.py

嗨,我的代码有些问题,出现类型错误 哪个是TypeError: 'bool' object is not iterable我应该使用if状态而不是for语句?

我要实现的目标是,如果on_message邮件已被固定7天或更长时间,然后取消固定该邮件。

这就是我正在使用的东西:

async def on_message(self, message):
    """Listen for a message then unpin any other messages older than 7 days"""
    server = message.server
    channelid = '490899209067823135'
    limit_date = datetime.now() - timedelta(days=7)
    if server:
        for message.content in message.channel.id == channelid:
            if limit_date:
                try:
                    await self.bot.unpin_message(message)

                except discord.Forbidden:
                    print("No permissions to do that!")

不知道我在哪里错了。

5 个答案:

答案 0 :(得分:1)

在您的for循环中,message.channel.id == channelid的计算值为布尔值TrueFalse。因此,您的for循环要么变为

for message.content in True

for message.content in False

这里in的右侧必须是可迭代的。编译器抱怨,因为不是。

要建议该问题的解决方案,我们需要有关您要执行的操作的更多信息。

答案 1 :(得分:1)

问题:

for message.content in message.channel.id == channelid:

==正在检查 mess.age.channel.id和channelid是否相等,因此您的状态有效地变为了

for message.content in true:

for message.content in false:

for循环遍历列表或类似结构中的每个元素,因此在'in'之后不能使用布尔值

我的猜测是,您想分别将channelid 分配到message.channel.id,然后遍历它。例如

message.channel.id = channelid
for message.content in message.channel.id:

答案 2 :(得分:0)

for message.content in message.channel.id == channelid:

也许你想拥有

if message.channel.id == channelid:
    for message.content in message.channel.id

答案 3 :(得分:0)

正如其他人指出的那样,由于message.channel.id == channelid返回TrueFalse,因此您的for循环实际上变为     用于True中的message.content 要么     False中的message.content

我想您要在此处实现的目标是遍历message等于message.channel.id的{​​{1}}个。因为您要传递一个channelid作为函数message的参数,所以根本不需要循环,因为您没有 multiple on_message迭代message本身中的 。循环必须在外部,其中调用on_message,即;或获取作为参数传递的on_message的列表。

对于您的代码,您只需更改

message

for message.content in message.channel.id == channelid:

答案 4 :(得分:0)

所有答案都使您可以深入了解为什么代码无法正常工作,但是可以通过以下方法实现所需的内容:

async def on_message(self, message):
  """Listen for a message then unpin any other messages older than 7 days"""
  messages = await self.bot.pins_from(self.bot.get_channel('490899209067823135'))
  for msg in messages:
    if (datetime.now() - msg.timestamp).days > 7:
      try:
        await self.bot.unpin_message(msg)
  except discord.Forbidden:
    print("No permissions to do that!")