通过discord.Bot的loop.create_task运行Quart时出现意外关键字参数loop错误
问题原因
- 该错误属于Python 3.10+版本的兼容性问题:Python 3.10开始
asyncio.start_server、loop.create_server等异步API正式移除了废弃的loop关键字参数,你当前使用的Hypercorn(Quart默认的ASGI服务器)版本还在向这些API传递loop参数,触发类型错误。 - 补充:你调用
app.run_task的写法虽然没有直接触发报错,但参数传递不够规范,存在版本兼容隐患。
解决方案
首先执行依赖升级命令,直接修复Hypercorn的兼容问题:
pip install --upgrade quart hypercorn
升级完成后调整启动代码,规范run_task的参数写法即可正常运行:
def start(): # 显式指定host、port参数,避免参数位置匹配错误 bot.loop.create_task(app.run_task(host="0.0.0.0", port=5000)) load_commands() print(f"loaded commands: {loaded_commands}") bot.run(TOKEN)
如果升级依赖后仍存在异常,可以手动替换为uvicorn作为Quart的运行服务器,修改启动任务逻辑即可:
import uvicorn async def run_quart(): config = uvicorn.Config(app, host="0.0.0.0", port=5000) server = uvicorn.Server(config) await server.serve() def start(): bot.loop.create_task(run_quart()) load_commands() print(f"loaded commands: {loaded_commands}") bot.run(TOKEN)
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

