Почему происходит ошибка?

Рейтинг: 0Ответов: 1Опубликовано: 23.05.2023

Когда нажимаю на кнопку КАТАЛОГ📕 происходит ошибка данная ниже кода

Код:

from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import ReplyKeyboardRemove, \
    ReplyKeyboardMarkup, KeyboardButton, \
    InlineKeyboardMarkup, InlineKeyboardButton

#api ключ бота
bot = Bot(token='Тут токен')
#Диспетчер, будет обрабатывать сообщения
dp = Dispatcher(bot)
#Фото для бота
startphoto = open('images/start.jpg', 'rb')

@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    markup = InlineKeyboardMarkup()
    catalog_but = InlineKeyboardButton("КАТАЛОГ📕", callback_data='catalog_but')
    help_but = InlineKeyboardButton("НАПИСАТЬ МЕНЕДЖЕРУ🤵️", callback_data='help_but')
    referalka_but = InlineKeyboardButton("РЕФЕРАЛЬНАЯ СИСТЕМА 👥", callback_data='referalka_but')
    markup.add(catalog_but)
    markup.add(referalka_but)
    markup.add(help_but)
    await bot.send_photo(message.chat.id,startphoto, caption='Привет!✋\nЭтот чат-бот удивит тебя низкими ценами на подписки популярных сервисов!💸\nНапример подписка на дискорд "нитро" у нас стоит 260₽, вместо 804₽🤑', reply_markup=markup)

@dp.callback_query_handler(lambda c: c.data == "catalog_but")
async def referalka(call: types.callback_query):

    await bot.answer_callback_query(call.id)
    await bot.send_photo(call.message.chat.id,startphoto, caption='Сделайте свой выбор👇' )


executor.start_polling(dp)

Ошибка:

Task exception was never retrieved
future: <Task finished name='Task-12' coro=<Dispatcher._process_polling_updates() done, defined at D:\grum_shop\lib\site-packages\aiogram\dispatcher\dispatcher.py:407> exception=ValueError('I/O operation on closed file')>
Traceback (most recent call last):
  File "D:\grum_shop\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 "D:\grum_shop\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 235, in process_updates
    return await asyncio.gather(*tasks)
  File "D:\grum_shop\lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "D:\grum_shop\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 283, in process_update
    return await self.callback_query_handlers.notify(update.callback_query)
  File "D:\grum_shop\lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "C:\Users\User\PycharmProjects\grum_shop\main.py", line 29, in referalka
    await bot.send_photo(call.message.chat.id,startphoto, caption='Сделайте свой выбор👇' )
  File "D:\grum_shop\lib\site-packages\aiogram\bot\bot.py", line 565, in send_photo
    result = await self.request(api.Methods.SEND_PHOTO, payload, files)
  File "D:\grum_shop\lib\site-packages\aiogram\bot\base.py", line 236, in request
    return await api.make_request(await self.get_session(), self.server, self.__token, method, data, files,
  File "D:\grum_shop\lib\site-packages\aiogram\bot\api.py", line 139, in make_request
    async with session.post(url, data=req, **kwargs) as response:
  File "D:\grum_shop\lib\site-packages\aiohttp\client.py", line 1141, in __aenter__
    self._resp = await self._coro
  File "D:\grum_shop\lib\site-packages\aiohttp\client.py", line 508, in _request
    req = self._request_class(
  File "D:\grum_shop\lib\site-packages\aiohttp\client_reqrep.py", line 313, in __init__
    self.update_body_from_data(data)
  File "D:\grum_shop\lib\site-packages\aiohttp\client_reqrep.py", line 505, in update_body_from_data
    body = body()
  File "D:\grum_shop\lib\site-packages\aiohttp\formdata.py", line 170, in __call__
    return self._gen_form_data()
  File "D:\grum_shop\lib\site-packages\aiohttp\formdata.py", line 163, in _gen_form_data
    self._writer.append_payload(part)
  File "D:\grum_shop\lib\site-packages\aiohttp\multipart.py", line 829, in append_payload
    size = payload.size
  File "D:\grum_shop\lib\site-packages\aiohttp\payload.py", line 379, in size
    return os.fstat(self._value.fileno()).st_size - self._value.tell()
ValueError: I/O operation on closed file

Ответы

▲ 0Принят

Файл открывайте/закрывайте прямо там где отправляете, а не при старте программы. Либо при старте программы читайте из файла данные, и их уже отправляйте, а не объект файла.