单步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,提问作者Евгений
相关产品推荐
相关产品推荐

