Python,aigram:错误为“wait state.finish()”

2024-06-25 23:45:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用AigramAPI制作一个电报机器人。我是it初学者,所以我对“wait state.finish()”行有问题。启动python文件时,出现以下错误:

未来:<;任务完成名称='Task-23'coro=<;Dispatcher.\u process\u polling\u updates()完成,定义在C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\Dispatcher\Dispatcher.py:409>;异常=键错误(1055580872)>; 回溯(最近一次呼叫最后一次): 文件“C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aigram\dispatcher\dispatcher.py”,第417行,在进程轮询更新中 对于itertools.chain.from_iterable(等待self.process_更新(更新,快速))中的响应: 文件“C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aigram\dispatcher\dispatcher.py”,第238行,正在进行更新 return wait asyncio.gather(*任务) 文件“C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\handler.py”,第116行,在notify中 响应=等待处理程序对象处理程序(*参数,**部分数据) 文件“C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\dispatcher.py”,第259行,正在更新中 return wait self.message\u handlers.notify(update.message) 文件“C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\handler.py”,第116行,在notify中 响应=等待处理程序对象处理程序(*参数,**部分数据) 文件“x-wingide-python-shell://115832752/2“,第37行,在get_random_user中” 文件“C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\storage.py”,第322行,完成 等待self.storage.finish(chat=self.chat,user=self.user) 文件“C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aiogram\dispatcher\storage.py”,第202行,完成 等待self.reset_状态(chat=chat,user=user,with_data=True) 文件“C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aigram\contrib\fsm\u storage\memory.py”,第78行,处于重置状态 自我清理(聊天室、用户) 文件“C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aigram\contrib\fsm\u storage\memory.py”,第108行,在\u cleanup中 如果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)

如果可以,请帮忙


Tags: 文件pymessagelibpackageslocalsitestorage
1条回答
网友
1楼 · 发布于 2024-06-25 23:45:52

好吧,我找到了答案。 问题出现在文件“C:\Users\User\AppData\Local\Programs\Python38\lib\site packages\aigram\contrib\fsm\u storage\memory.py”的第108行“清理”中。 存在self。数据没有任何键。我通过向_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]

现在我没有任何错误

相关问题 更多 >