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

单步FSM报错:Town() takes no arguments,需实现城市输入回显功能

问题解决:FSM机器人报错「Town() takes no arguments」

错误原因

你把@weather_router.message(Command("weather"))装饰器错误地放在了Town类的上方。这个装饰器用于绑定消息处理函数,当它作用在类上时,会尝试将类作为函数调用,而StatesGroup的子类实例化不需要参数,因此触发报错。

修复步骤

  • 将命令装饰器移到处理/weather命令的town函数上方
  • 给接收城市的townn函数添加状态监听装饰器,指定监听Town.town状态下的用户消息

修正后的完整代码

from aiogram import Router, types
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup

weather_router = Router()

class Town(StatesGroup):
    town = State()

@weather_router.message(Command("weather"))
async def town(message: types.Message, state: FSMContext):
    await message.answer(f"{message.from_user.first_name}, введи город")
    await state.set_state(Town.town)

@weather_router.message(Town.town)
async def townn(message: types.Message):
    await message.answer(f"Ваш город\n{message.text}")

说明

  • Town类作为状态组,不需要任何装饰器,仅用来定义状态
  • @weather_router.message(Command("weather"))正确绑定到触发命令后的处理函数,引导用户输入城市并设置状态
  • @weather_router.message(Town.town)绑定到处于Town.town状态时的消息处理函数,接收并回显用户输入的城市名称

内容的提问来源于stack exchange,提问作者Евгений

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:02:32