Aiogram телеграм бот, не находит переменную, определенная в global
from aiogram import executor, Bot, Dispatcher, types
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.dispatcher.storage import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from config import TOKENG
from random import randint
storage = MemoryStorage()
bot = Bot(TOKENG)
dp = Dispatcher(bot, storage=storage)
ikb = InlineKeyboardMarkup(inline_keyboard=[
InlineKeyboardButton(randint(0, 100))
])
class ProfileState(StatesGroup):
num_one = State()
num_two = State()
attempt = State()
result = State()
@dp.message_handler(commands=['start'])
async def cmd_start(message: types.Message):
await message.reply('Привет! Если хочешь поиграть в игру "Угадай число", то пропиши команду /guess')
@dp.message_handler(commands=['guess'])
async def guess_num(message: types.Message, state: FSMContext):
await message.answer('Напиши число, от которого будет загадываться рандомное число')
await ProfileState.num_one.set()
@dp.message_handler(state=ProfileState.num_one)
async def num_first(message: types.Message, state: FSMContext):
global number_1
number_1 = int(message.text)
await message.answer('Отправь число, до которого будет загадываться рандомное число')
await ProfileState.next()
@dp.message_handler(lambda message: not message.text.isdigit, state=ProfileState.num_one)
async def fisrt_num_check(message: types.Message):
await message.answer('Вы ввели не число!')
@dp.message_handler(lambda message: not message.text.isdigit, state=ProfileState.num_two)
async def fisrt_num_check(message: types.Message):
await message.answer('Вы ввели не число!')
@dp.message_handler(state=ProfileState.attempt)
async def num_first(message: types.Message, state: FSMContext):
global number
number = int(message.text) # Кол-во попыток
await message.answer('Введите число попыток')
await ProfileState.next()
@dp.message_handler(state=ProfileState.num_two)
async def num_second(message: types.Message, state: FSMContext):
global rnum
number_2 = int(message.text)
await message.answer(f'Я загадал число от {number_1}, до {number_2}, попробуй угадать загаданное число, у вас есть {number} попытки[ок]')
rnum = randint(number_1, number_2)
await ProfileState.next()
@dp.message_handler(state=ProfileState.result)
async def input_result(message: types.Message, state: FSMContext):
while True:
if rnum < int(message.text):
return await message.answer('Меньше')
elif rnum > int(message.text):
return await message.answer('Больше')
elif rnum == int(message.text):
return await message.reply('Вы отгадали загаданное число!')
elif number == 10:
await message.answer(f'Вы потратили все попытки! Верное число: {rnum}')
break
else:
await message.answer('Ошибка: вы ввели не число!')
number += 1
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Вот ошибка, выходит после того как пользователь ввел второе число:
> Task exception was never retrieved
> future: <Task finished name='Task-18' coro=<Dispatcher._process_polling_updates() done, defined at
> C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py:407>
> exception=NameError("name 'number' is not defined")>
> Traceback (most recent call last):
> File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py",
> line 415, in _process_polling_updates
> for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
> File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py",
> line 235, in process_updates
> return await asyncio.gather(*tasks)
> File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\handler.py",
> line 116, in notify
> response = await handler_obj.handler(*args, **partial_data)
> File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py",
> line 256, in process_update
> return await self.message_handlers.notify(update.message)
> File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\handler.py",
> line 116, in notify
> response = await handler_obj.handler(*args, **partial_data)
> File "D:\pythonProject\telebot\guess number.py", line 71, in num_second
> await message.answer(f'Я загадал число от {number_1}, до {number_2}, попробуй угадать загаданное число, у вас есть {number}
> попытки[ок]')
> NameError: name 'number' is not defined
Источник: Stack Overflow на русском