Неуловимая ошибка прерывает цикл "aiogram.utils.exceptions.NetworkError" (while, loop, телеграм бот)

Имеется телеграм-бот на aiogram (2.19).

# ... пропущен код ...

async def current_info(message: types.Message, state: FSMContext):
    current_data = {}
    while True:
        local_file = open(json_file, 'r')
        local_data = local_file.get('data')
        if local_data and local_data != current_data:
            current_data = local_data
            await message.answer(str(current_data))
        local_file.close()
        await asyncio.sleep(10)

# ... пропущен код ...

def register_handlers(dp: Dispatcher):
    # ... пропущен код ...
    # InfoState.ok - состояние успешной авторизации
    dp.register_message_handler(current_info, lambda message: message.text == "Начать 
                                смотреть актуальные обновления", state=InfoState.ok)

# ... пропущен код ...

Выше представил упрощенную структуру. То есть есть корутина принимающая команду "Начать смотреть актуальные обновления" 1 раз - после чего начинающая бесконечные запросы в "json_file" на наличие чего-то нового и после отправки этого юзеру.

Все работает хорошо, за исключением одной вещи. Когда проскакивает:

aiogram.utils.exceptions.NetworkError

бот свою работу аварийно не завершает - он продолжает функционировать и отвечать на прямые запросы юзеров: "команда - запрос". Но с цикла while True вылетает. И самое худшее, что я не могу словить эту ошибку - и, например, вызвать сообщение юзеру, где он перезапустит цикл кнопкой "Начать смотреть актуальные обновления". Функция с while перезагружается, без перезапуска бота, без проблем. Проблема в том, что ты не можешь быть уверен случилась ли ошибка и пора перезапустить цикл, или просто нет новый данных в json_file

Желаемый результат для меня - отлавливание этой ошибки для дальнейшего перезапуска цикла while True, но не всего бота полностью.

Попытки обернуть try except мой if __name__ == '__main__': asyncio.run(main()) и await message.answer, все тело while ни к чему не привели. Ошибка происходит вне моего кода, но ломает цикл в моем коде.

Заранее прошу прощения за глупость, и большое спасибо за любые Ваши ответы и подсказки!

Весь код ошибки: введите сюда описание изображения


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

Автор решения: человек

Есть вариант, сделать синхронность, приведу пример...

from threading import Thread

def thisisfunc():
 while(True):
    print('world')

thread1 = Thread(target=thisisfunc())

thread1.start()
thread1.join()

думаю поможет...

→ Ссылка