TypeError:'bool'对象不可迭代

问题描述 投票:0回答:5

嗨,我有一些代码的问题,我得到一个类型错误,这是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!")

不知道我在哪里错了。

python python-3.x discord discord.py
5个回答
1
投票

在你的for循环中,message.channel.id == channelid求值为一个布尔值TrueFalse。所以你的for循环变成了

for message.content in True

要么

for message.content in False

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

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


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:

0
投票

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

也许你的意思是

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

0
投票

正如其他人所指出的那样,因为message.channel.id == channelid要么返回True,要么返回False,你的for循环基本上变成了true中的message.content或者false中的message.content

我想你在这里想要实现的是循环message,其message.channel.id等于channelid。因为你得到一个message作为函数on_message的参数传递,你根本不需要一个循环,因为你没有多个messages在on_message本身迭代。循环必须在外面,在那里调用on_message,即;或获取作为参数传递的messages列表。

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

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

if message.channel.id == channelid:

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!")
© www.soinside.com 2019 - 2024. All rights reserved.