首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python,await:"await state.finish()“出错

Python,await:"await state.finish()“出错
EN

Stack Overflow用户
提问于 2021-07-05 21:51:50
回答 1查看 338关注 0票数 0

我正在做一个电报机器人,用的是API API。我是它的初学者,所以我对"await state.finish()“行有一个问题。当我启动我的python文件时,我得到了这个错误:

C:\Users\User\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\dispatcher.py:409>:<任务完成名称=‘任务-23’coro= "C:\Users\User\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\dispatcher\dispatcher.py",(1055580872)>回溯(最近一次调用):文件coro=

我的代码如下:

代码语言:javascript
复制
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)

如果可以的话,请帮忙

EN

回答 1

Stack Overflow用户

发布于 2021-07-05 22:29:04

好吧,我找到答案了。问题在_cleanup中的文件"C:\Users\User\AppData\Local\Programs\Python\Python38\lib\site-packages\aiogram\contrib\fsm_storage\memory.py",第108行。self.data没有任何钥匙。我通过向_cleanup函数添加一些新的行解决了这个问题,如下所示:

代码语言:javascript
复制
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]

现在我没有任何错误了!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68257312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档