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

Python Telethon机器人aiter错误:TotalList无法用async for迭代

问题分析与解决

你的代码存在两个核心问题:

  • await bot.get_participants()返回的是同步可迭代的TotalList对象,不需要用async for,直接用普通for循环遍历即可,这是触发报错的直接原因。
  • bot.iter_participants()返回的是异步迭代器,无法直接用user in admins判断成员是否为管理员——同步的in操作无法处理异步迭代器,且这种方式效率极低。

修正后的代码

# 获取所有群成员(已通过await拿到完整列表,直接用普通for遍历)
all_participants = await bot.get_participants(group, aggressive=False)

# 先把所有管理员的ID收集到集合中(集合查询效率远高于列表)
admin_ids = set()
async for admin in bot.iter_participants(group, filter=ChannelParticipantsAdmins):
    admin_ids.add(admin.id)

print('[+] Banno gli utenti...')
# 用普通for循环遍历所有成员
for user in all_participants:
    # 通过ID快速判断是否为管理员
    if user.id not in admin_ids:
        # 在这里编写你的清理逻辑,比如踢除非管理员
        # await bot.kick_participant(group, user)
        pass

关键改动说明

  1. 替换async for为普通for:get_participants通过await已经获取了完整的成员列表,是同步可迭代对象,无需异步循环。
  2. 预存管理员ID到集合:异步遍历管理员迭代器,将管理员ID存入集合后,用user.id not in admin_ids做快速判断——集合的in操作时间复杂度为O(1),既解决了异步迭代器无法直接判断的问题,又提升了查询效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:33:33