Telethon运行报TypeError需asyncio可等待对象,该如何修复?
问题修复方案
报错根因
这个TypeError: An asyncio.Future, a coroutine or an awaitable is required报错由两处写法错误共同导致:
- 你提前对
work()协程执行了await,执行完成后返回的是普通值(该函数无显式return,实际返回None),而asyncio.gather()要求传入的是未执行的协程对象 asyncio.gather()本身就是可等待对象,调用时需要前置await关键字,否则会触发未等待协程的相关异常
修复后的完整代码
import asyncio from telethon import TelegramClient from telethon.functions import JoinChannelRequest # 替换为自己申请的API参数 api_id = 你的APIID api_hash = "你的APIHASH" bot = "@bot" ch1 = "t.me/bot" async def work(client): async with client: me = await client.get_me() username = me.username print('Working with',username) print('') channel1 = await client.get_entity(ch1) await client(JoinChannelRequest(channel1)) print(username, 'Some Text', ch1) print('----------------------------------------------------------') async def main(): await asyncio.gather( # 直接传入协程对象,不要提前加await work(TelegramClient('user01', api_id, api_hash)), # 如果需要同时运行多个账号,直接在下方追加对应的work调用即可 # work(TelegramClient('user02', api_id, api_hash)), ) asyncio.run(main())
补充说明
如果仅需要运行单个客户端,你也可以不用asyncio.gather,直接在main函数里await work调用即可,写法更简洁:
async def main(): await work(TelegramClient('user01', api_id, api_hash))
内容的提问来源于stack exchange,提问作者JodieMarch
相关产品推荐
相关产品推荐

