TypeError:'bool' 对象不可迭代
Posted
技术标签:
【中文标题】TypeError:\'bool\' 对象不可迭代【英文标题】:TypeError: 'bool' object is not iterableTypeError:'bool' 对象不可迭代 【发布时间】:2019-02-20 16:30:27 【问题描述】:您好,我遇到了一些代码问题,我收到了类型错误
这是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!")
不知道我哪里错了。
【问题讨论】:
for message.content in message.channel.id == channelid:
- 你认为message.channel.id == channelid
的结果是什么?虽然整行对我来说没有多大意义
【参考方案1】:
在您的 for 循环中,message.channel.id == channelid
的计算结果为布尔值 True
或 False
。所以你的for
循环变成了
for message.content in True
或
for message.content in False
这里in
的右边一定是一些可迭代的。编译器抱怨,因为它不是。
为了建议解决此问题的方法,我们需要更多关于您正在尝试做的事情的信息。
【讨论】:
【参考方案2】:问题:
for message.content in message.channel.id == channelid:
== 是检查mess.age.channel.id 和channelid 是否相等,所以你的statemnts 有效地变成了
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:
【讨论】:
【参考方案3】:for message.content in message.channel.id == channelid:
也许你的意思是
if message.channel.id == channelid:
for message.content in message.channel.id
【讨论】:
【参考方案4】:正如其他人指出的那样,因为 message.channel.id == channelid
要么返回 True
或 False
,所以你的 for 循环基本上变成了要么
对于 true 中的 message.content
要么
对于 False 中的 message.content
我想你在这里试图实现的是循环message
s,其message.channel.id
等于channelid
。因为你得到一个 message
作为函数 on_message
的参数传递,所以你根本不需要循环,因为你没有 multiple message
s 来迭代 在on_message
本身中。循环必须在外面,这里调用on_message
,即;或获取作为参数传递的message
s 列表。
对于您的代码,您可以简单地更改
for message.content in message.channel.id == channelid:
到
if message.channel.id == channelid:
【讨论】:
【参考方案5】:所有答案都可以让您很好地了解为什么您的代码不起作用,但您可以通过以下方式实现您想要的:
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!")
【讨论】:
当我在for msg in messages:
行之前添加if server:
我会得到一个AttributeError: 'Context' object has no attribute 'server'
上面的server = message.server
加了吗?以上是关于TypeError:'bool' 对象不可迭代的主要内容,如果未能解决你的问题,请参考以下文章
Python TypeError:'bool'对象不可调用[重复]
Flask-Login 引发 TypeError: 'bool' 对象在尝试覆盖 is_active 属性时不可调用
pyspark:TypeError:'float'对象不可迭代
TypeError: 'float' 类型的对象没有 len() & TypeError: 'float' 对象不可迭代