Python,Aiogram:"await state.finish()"错误



我正在用aiogram API制作一个电报机器人程序。我是首发球员,所以我对";wait state.finish((&;线当我启动我的python文件时,我得到了这个错误:

未来:<任务完成名称="任务-23"coro=<调度员_process_polling_updates((完成,在C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\dispatcher.py:409>exception=KeyError(1055580872(>追踪(最近一次通话(:文件";C: \Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\dispatcher.py";,第417行,在_process_polling_updates中对于itertools.chain.from_interable(等待self.process_updates(updates,fast((中的响应:文件";C: \Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\dispatcher.py";,第238行,在process_updates中return await asyncio.gate(*tasks(文件";C: \Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\handler.py";,第116行,在通知中response=await handler_obj.handler(*args,**partial_data(文件";C: \Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\dispatcher.py";,第259行,在process_update中return await self.messagehandlers.notify(update.message(文件";C: \Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\handler.py";,第116行,在通知中response=await handler_obj.handler(*args,**partial_data(文件";x翼面-ython-shell://115832752/2",第37行,在get_random_user中文件";C: \Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\storage.py";,第322行,完成等待self.storage.fining(chat=self.chat,user=self.user(文件";C: \Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\storage.py";,第202行,完成wait self.reset_state(chat=聊天,user=user,with_data=True(文件";C: \Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\contrib\fsm_storage\memory.py",第78行,处于reset_state自我_清理(聊天,用户(文件";C: \Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\contrib\fsm_storage\memory.py";,第108行,在_cleanup中if self.data[chat][user]=={‘state’:无,‘data’:{},‘bucket’:{}}:密钥错误:1055580872

我的代码如下:

import logging
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher import FSMContext
import random
TOKEN = 'HERE IS TOKEN'
#
logging.basicConfig(level=logging.INFO)
storage = MemoryStorage()
bot = Bot(token=TOKEN)
dp = Dispatcher(bot, storage=storage)
class UsersClass(StatesGroup):
users = State()
@dp.message_handler(commands=['start', 'help'])
async def send_welcome(message: types.Message):
await message.reply("Hi!nI'm Bot!!!!")
@dp.message_handler(commands=['random'])
async def random_cmd(message: types.Message):
# old style:
# await bot.send_message(message.chat.id, message.text)
# await message.answer(random.choice())
await UsersClass.users.set()
await message.reply("Write the names of all participants separated by a space")
@dp.message_handler(state=UsersClass.users)
async def get_random_user(message: types.Message, state: FSMContext):
async with state.proxy() as data:
data['users'] = message.text.split(' ')
await bot.send_message(message.chat.id, f"Chosed: {random.choice(data['users'])}")
await state.finish()
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)

如果你能,请帮忙

好的,我找到了答案。该提议在文件";C: \Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\contrib\fsm_storage\memory.py";,cleanup中的第108行。有self-data没有任何密钥。我通过在_cleanup函数中添加一些新行来解决这个问题,它看起来像这样:

def _cleanup(self, chat, user):
if chat not in self.data.keys() or user not in self.data[chat].keys():
return
if self.data[chat][user] == {'state': None, 'data': {}, 'bucket': {}}:
del self.data[chat][user]
if not self.data[chat]:
del self.data[chat]

现在我没有任何错误!

最新更新