Как исправить ошибку в коде для вывода информации в Telegram боте на Python, если первого урока нет?

Всем доброго времени суток! :) У меня возникла проблема! Мне нужно получить с помощью библиотеки NetSchoolAPI данные с электронного журнала и вывести их через Telegram-бота. Для входа в систему пользователь вводит логин и пароль в чате с ботом, эти данные отправляются в Базу Данных SQLite. После этого логин и пароль вставляются в поля функции библиотеки NetSchoolAPI для входа в систему и получения оттуда информации с последующим выводом! Повторюсь, что использую библиотеку SQLite, для которой должен быть отдельный файл с Базой Данных! Код для анализа БД хранится в файле db.py. Код кнопок Telegram хранится в файле markups.py. Саму структуру таблицы Базы Данных и всего проекта прикреплю ниже!

Мне нужно вывести расписание на определенный день по нажатию на кнопку с выбором дня недели. **Всё работает стабильно, за исключением того, что если в выбранный день первого урока нет, то программа будет давать сбой и выводить ошибку. В частности это происходит только со Средой, с остальными всё нормально, так как там везде есть 1 **

main.py

import logging
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import CallbackQuery
import markups as nav
from db import Database
import asyncio
from netschoolapi import NetSchoolAPI


TOKEN = ""

logging.basicConfig(level=logging.INFO)

bot = Bot(token=TOKEN)
dp = Dispatcher(bot)

db = Database('database.db')


@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    if (not db.user_exists(message.from_user.id)): #Проверка: Если такого id пользователя нет в базе, то регистрируем
        db.add_user(message.from_user.id)
        await bot.send_message(message.from_user.id, "Укажите ваш логин и пароль от Электронного Журнала через пробел.\nПример: ИвановТ ivanov2008")
    else:
        await bot.send_message(message.from_user.id, "Вы уже зарегистрированы!", reply_markup=nav.mainMenu)

async def get_info(user_id, num):
    ns = NetSchoolAPI('https://net-school.cap.ru/')
    await ns.login(
        db.get_nickname(user_id),  # Логин пользователя
        db.get_password(user_id),  # Пароль пользователя
        511,
    )

    info = await ns.diary()

    lessons_list = info.schedule[num].lessons
    res = []
    for l in lessons_list:
        res.append(f'{l.number} урок: {l.subject} - {l.room[0:4]} кб')
    schedule = '\n'.join(res)

    await ns.logout()
    return schedule


@dp.message_handler()
async def bot_message(message: types.Message):
    if message.chat.type == 'private':
        if message.text == '⚙️ Настройки':  # Отправка данных из БД
            await bot.send_message(message.from_user.id, 'Ну настраивай!) ', reply_markup=nav.otherMenu)
        elif message.text == ' Расписание':
            await bot.send_message(message.from_user.id, '️ Выберете день недели, на который хотите увидеть расписание:', parse_mode="HTML", reply_markup=nav.ScheduleMenu)
        elif message.text == '️ Сбросить настройки':
            db.delete_user(message.from_user.id)
            await bot.send_message(message.from_user.id, 'Ваши данные удалены! \nДля регистрации напишите: /start', parse_mode="HTML")
        elif message.text == ' Мой профиль':
            profile_info = "Ваш ник: " + '<b>' + db.get_nickname(message.from_user.id) + '</b>' + "\nВаш пароль: " + '<b>' + db.get_password(message.from_user.id) + '</b>'
            await bot.send_message(message.from_user.id, profile_info, parse_mode="HTML")
        elif message.text == ' Главное меню' or message.text == '⬅️ Назад':
            await bot.send_message(message.from_user.id, 'Ты снова в главном меню!', reply_markup=nav.mainMenu)
        elif message.text == 'Понедельник':
            info = await get_info(message.from_user.id, 0)
            await bot.send_message(message.from_user.id, '✨<u>Расписание на Понедельник: </u> \n' + info, parse_mode="HTML", reply_markup=nav.ScheduleMenu)
        elif message.text == 'Вторник':
            info = await get_info(message.from_user.id, 1)
            await bot.send_message(message.from_user.id, '✨<u>Расписание на Вторник: </u> \n' + info, parse_mode="HTML", reply_markup=nav.ScheduleMenu)
        elif message.text == 'Среда':
            info = await get_info(message.from_user.id, 2)
            await bot.send_message(message.from_user.id, '✨<u>Расписание на Среду: </u> \n' + info, parse_mode="HTML", reply_markup=nav.ScheduleMenu)
        elif message.text == 'Четверг':
            info = await get_info(message.from_user.id, 3)
            await bot.send_message(message.from_user.id, '✨<u>Расписание на Четверг: </u> \n' + info, parse_mode="HTML", reply_markup=nav.ScheduleMenu)
        elif message.text == 'Пятница':
            info = await get_info(message.from_user.id, 4)
            await bot.send_message(message.from_user.id, '✨<u>Расписание на Пятницу: </u> \n' + info, parse_mode="HTML", reply_markup=nav.ScheduleMenu)
        else:
            if db.get_signup(message.from_user.id) == "setnickname": #Проверка на успешную запись в БД
                if (len(message.text) > 60):
                    await bot.send_message(message.from_user.id, "Пароль и логин не могут превышать 60 символов")
                else:
                    text = message.text.split(' ')
                    login = text[0]
                    passw = text[1]
                    db.set_nickname(message.from_user.id, login)
                    db.set_password(message.from_user.id, passw)
                    db.set_signup(message.from_user.id, "done")
                    await bot.send_message(message.from_user.id, "Регистрация прошла успешно!",
                                           reply_markup=nav.mainMenu)
            else:
                await bot.send_message(message.from_user.id, "Я вас не понял! :( \nВоспользуйтесь пожалуйста кнопками!")

if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)

markups.py

from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton

btnMain = KeyboardButton(' Главное меню')

# --- Main Menu ---
btnSchedule = KeyboardButton(' Расписание')
btnSettings = KeyboardButton('⚙️ Настройки')
mainMenu = ReplyKeyboardMarkup(resize_keyboard = True)
mainMenu.add(btnSchedule, btnSettings)

# --- Other Menu ---
btnDelete = KeyboardButton('️ Сбросить настройки')
btnProfile = KeyboardButton(' Мой профиль')
otherMenu = ReplyKeyboardMarkup(resize_keyboard = True)
otherMenu.add(btnProfile, btnDelete, btnMain)

# --- Schedule Menu ---
ScheduleMenu = ReplyKeyboardMarkup(resize_keyboard = True, row_width=2)
btnMonday = KeyboardButton('Понедельник')
btnTuesday = KeyboardButton('Вторник')
btnWednesday = KeyboardButton('Среда')
btnThursday = KeyboardButton('Четверг')
btnFriday = KeyboardButton('Пятница')
btnBack = KeyboardButton('⬅️ Назад')
ScheduleMenu.add(btnMonday, btnTuesday, btnWednesday, btnThursday, btnFriday, btnBack)

Вот структура Базы Данных 'database.db': Вот структура Базы Данных 'database.db'

Вот структура проекта: Вот структура проекта:

Вот, как это выглядит через официальный сайт Вот, как это выглядит через официальный сайт

Вот работа на практике, как это выглядит через Telegram: Вот, как это выглядит через официальный сайт

Функция, через которую производится подключение к Электронному Журналу через NetSchoolAPI.

async def get_info(user_id, num):
    ns = NetSchoolAPI('https://net-school.cap.ru/')
    await ns.login(
        db.get_nickname(user_id),  # Логин пользователя
        db.get_password(user_id),  # Пароль пользователя
        511,
    )

    info = await ns.diary()

    lessons_list = info.schedule[num].lessons
    lessons_shedule = []
    for lesson in lessons_list:
        less = lesson.subject
        lessons_shedule.append(less)
    number_shedule = []
    for lesson in lessons_list:
        less = lesson.number
        number_shedule.append(less)
    room_shedule = []
    for lesson in lessons_list:
        less = lesson.room
        room_shedule.append(less)

    if 1 in number_shedule:
        one = ('<i>' + str(number_shedule[0]) + ' урок: ' + '</i>', '<b>' + lessons_shedule[0] + '</b>', ' - ' + str(room_shedule[0][0:4] + 'кб'))
    else:
        one = ('Нет урока', '', '')
    if 2 in number_shedule:
        two = ('<i>' + str(number_shedule[1]) + ' урок: ' + '</i>', '<b>' + lessons_shedule[1] + '</b>', ' - ' + str(room_shedule[1][0:4] + 'кб'))
    if 3 in number_shedule:
        three = ('<i>' + str(number_shedule[2]) + ' урок: ' + '</i>', '<b>' + lessons_shedule[2] + '</b>', ' - ' + str(room_shedule[2][0:4] + 'кб'))
    if 4 in number_shedule:
        four = ('<i>' + str(number_shedule[3]) + ' урок: ' + '</i>', '<b>' + lessons_shedule[3] + '</b>', ' - ' + str(room_shedule[3][0:4] + 'кб'))
    if 5 in number_shedule:
        five = ('<i>' + str(number_shedule[4]) + ' урок: ' + '</i>', '<b>' + lessons_shedule[4] + '</b>', ' - ' + str(room_shedule[4][0:4] + 'кб'))
    if 6 in number_shedule:
        six = ('<i>' + str(number_shedule[5]) + ' урок: ' + '</i>', '<b>' + lessons_shedule[5] + '</b>', ' - ' + str(room_shedule[5][0:4] + 'кб'))
    if 7 in number_shedule:
        seven = ('<i>' + str(number_shedule[6]) + ' урок: ' + '</i>', '<b>' + lessons_shedule[6] + '</b>', ' - ' + str(room_shedule[6][0:4] + 'кб'))
    if 8 in number_shedule:
        eight = ('<i>' + str(number_shedule[7]) + ' урок: ' + '</i>', '<b>' + lessons_shedule[7] + '</b>', ' - ' + str(room_shedule[7][0:4] + 'кб'))


    if len(lessons_shedule) == 8:
        schedule = one[0] + one[1] + one[2] + '\n' + two[0] + two[1] + two[2] + '\n' + three[0] + three[1] + three[2] + '\n' + four[0] + four[1] + four[2] + '\n' + five[0] + five[1] + five[2] + '\n' + six[0] + six[1] + six[2] + '\n' + seven[0] + seven[1] + seven[2] + '\n' + eight[0] + eight[1] + eight[2]
    elif len(lessons_shedule) == 7:
        schedule = one[0] + one[1] + one[2] + '\n' + two[0] + two[1] + two[2] + '\n' + three[0] + three[1] + three[2] + '\n' + four[0] + four[1] + four[2] + '\n' + five[0] + five[1] + five[2] + '\n' + six[0] + six[1] + six[2] + '\n' + seven[0] + seven[1] + seven[2]
    await ns.logout()
    return schedule

Вот такая ошибка:

    ERROR:asyncio:Task exception was never retrieved
future: <Task finished name='Task-115' coro=<Dispatcher._process_polling_updates() 
done, defined at C:\Users\79170\Desktop\ProjectTwo\venv\lib\site-packages\aiogram\dispatcher\dispatcher.py:407> exception=NoResponseFromServer()>
Traceback (most recent call last):
  File "C:\Users\79170\Desktop\ProjectTwo\venv\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\79170\Desktop\ProjectTwo\venv\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 235, in process_updates
    return await asyncio.gather(*tasks)
  File "C:\Users\79170\Desktop\ProjectTwo\venv\lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
  File "C:\Users\79170\Desktop\ProjectTwo\venv\lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "C:\Users\79170\Desktop\ProjectTwo\main.py", line 66, in bot_message
    info = await get_info(message.from_user.id, 0)
  File "C:\Users\79170\Desktop\ProjectTwo\main.py", line 30, in get_info
    await ns.login(
  File "C:\Users\79170\Desktop\ProjectTwo\venv\lib\site-packages\netschoolapi\netschoolapi.py", line 53, in login
    await requester(self._wrapped_client.client.build_request(
  File "C:\Users\79170\Desktop\ProjectTwo\venv\lib\site-packages\netschoolapi\async_client_wrapper.py", line 47, in request
    raise errors.NoResponseFromServer from None
netschoolapi.errors.NoResponseFromServer

Ответы (0 шт):