discord.py运行警告:未等待BotBase.load_extension协程,求解决方案
问题分析与解决
你的问题出在两个核心点:
- discord.py 2.x版本后,
Bot.load_extension已变为异步协程方法,必须用await关键字等待执行完成,否则会触发"协程从未被等待"的运行警告。 - 你将
Bot.run(TOKEN)放在了for循环内部,这会导致第一次加载扩展后就直接启动Bot,后续扩展完全没机会加载,同时进一步放大了异步方法未被等待的问题。
修复后的代码示例
import os import asyncio import discord from discord.ext import commands TOKEN = "你的令牌内容" Bot = commands.Bot(command_prefix="!", intents=discord.Intents.all()) async def load_extensions(): for filename in os.listdir("./cogs"): if filename.endswith('.py'): # 用await等待异步加载方法执行完成 await Bot.load_extension(f'cogs.{filename[:-3]}') async def main(): await load_extensions() # 所有扩展加载完成后再启动Bot await Bot.start(TOKEN) if __name__ == "__main__": asyncio.run(main())
额外说明
- 若习惯使用
Bot.run(),可将其放在所有扩展加载完成之后,但Bot.run()是阻塞方法,更推荐用Bot.start()配合asyncio.run()的写法,更贴合异步编程规范。 - 确保
cogs目录是Python可识别的包(目录下需存在__init__.py文件,空文件即可),否则加载扩展时可能触发导入错误。
内容的提问来源于stack exchange,提问作者Zextrex33
相关产品推荐
相关产品推荐

