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

如何使用aiogram的Router模块?导入Router报错的解决方法

问题解决:aiogram导入Router报错及正确使用方法

错误原因

你遇到的ImportError: cannot import name 'Router' from 'aiogram'是因为当前安装的aiogram版本为2.x,而Router是aiogram 3.x版本才引入的核心路由模块,2.x版本中没有该类。

解决步骤

1. 升级aiogram到3.x版本

执行以下命令更新依赖:

pip install --upgrade aiogram

2. 修正代码适配3.x API

aiogram 3.x的API与2.x有较大变化,以下是修正后的完整代码:

main.py

import asyncio
from aiogram import Bot, Dispatcher
from aiogram.enums import ParseMode
from handlers import start

# 替换为你的实际配置
API_TOKEN = "你的机器人API令牌"
WEBHOOK_URL = "你的Webhook完整URL(如https://your-domain.com/webhook)"
WEBHOOK_PATH = "/webhook"
WEBAPP_HOST = "0.0.0.0"
WEBAPP_PORT = 8000

async def main():
    # 初始化Bot,指定解析模式
    bot = Bot(token=API_TOKEN, parse_mode=ParseMode.HTML)
    # 初始化Dispatcher
    dp = Dispatcher()

    # 注册子路由
    dp.include_router(start.router)

    # 设置Webhook
    await bot.set_webhook(WEBHOOK_URL)

    # 启动Webhook服务
    await dp.start_webhook(
        webhook_path=WEBHOOK_PATH,
        host=WEBAPP_HOST,
        port=WEBAPP_PORT,
        skip_updates=True,
    )

if __name__ == "__main__":
    asyncio.run(main())

/handlers/start.py

from aiogram.types import Message
from aiogram import Router

# 创建路由实例
router = Router()

# 绑定/start命令的处理函数
@router.message(commands=["start"])
async def cmd_start(message: Message):
    await message.answer("Работаем")

Router模块的正确使用方式

  • 模块化拆分:每个功能模块(如start、help、settings)创建独立的Router实例,实现代码解耦
  • 绑定处理函数:使用@router.message()、@router.callback_query()、@router.inline_query()等装饰器,为不同类型的更新绑定处理逻辑
  • 路由注册:在主Dispatcher中通过dp.include_router()将所有子路由注册到全局调度器
  • 路由过滤:可以为Router添加全局过滤器(如限定仅私聊、仅特定用户),示例:
    from aiogram.filters import ChatTypeFilter
    router = Router()
    router.message.filter(ChatTypeFilter(chat_type="private"))
    
  • 路由嵌套:支持Router包含其他子Router,实现更细粒度的模块划分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:21:38