aiogram报错:Dispatcher.__init__()仅接受1个位置参数却传入2个,求解答
问题分析与解决
报错原因
你使用的是aiogram 3.x版本,但代码写法遵循的是2.x版本的API规范。3.x版本对Dispatcher的初始化逻辑做了重大调整:Dispatcher的__init__方法不再接收Bot实例作为参数,因此你传入bot会触发参数数量不匹配的错误。
另外你的代码还有一个小问题:创建Bot实例时,你传入的是字符串"TOKEN_API",而不是定义好的变量TOKEN_API,这会导致Bot无法正确识别你的令牌。
修正后的代码
import asyncio from aiogram import Bot, Dispatcher, types TOKEN_API = "你的真实机器人令牌" async def main(): # 正确初始化Bot,传入变量形式的令牌 bot = Bot(token=TOKEN_API) # 3.x版本Dispatcher初始化无需传入Bot dp = Dispatcher() @dp.message_handler(commands=["start"]) async def send_random_letter(message: types.Message): await message.answer("hi, print /generate_pictures to start") # 通过start_polling传入Bot实例,启动机器人 await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())
关键修改点说明
- 移除
executor导入:aiogram 3.x已弃用旧的executor模块,改用异步上下文的方式启动机器人 - 调整Bot初始化位置:Bot实例需要在异步函数内创建,确保符合异步运行逻辑
- 修正Dispatcher初始化:3.x版本Dispatcher无需提前绑定Bot,启动时通过
start_polling传入即可 - 修复令牌传递错误:将字符串
"TOKEN_API"改为变量TOKEN_API,保证Bot能读取正确的令牌
内容的提问来源于stack exchange,提问作者Fda Kreobmel
相关产品推荐
相关产品推荐

