Я разрабатываю асинхронный бот Telegram с использованием asyncio и реализовал логику повтора для своей функции message_listener для обработки таких ошибок, как TimeoutError. Мой код пытается перехватить все исключения, кроме Exception as e, чтобы гарантировать перезапуск прослушивателя после любой ошибки. Однако при возникновении ошибки TimeoutError задача полностью останавливается, не вызывая блок исключения и не повторяя попытку, хотя моя задача контрольного сигнала продолжает выполняться.
Пример журнала:
Код: Выделить всё
2024-11-13 22:10:05,488:WARNING:Telegram is having internal issues TimeoutError: Timeout while fetching data (caused by GetHistoryRequest)
Я подозреваю, что задача может быть отменена автоматически или что исключение не распространяется обратно в мой блок try-кроме.
Код ключа:< /p>
Код: Выделить всё
async def message_listener():
try:
while True:
message = await client.get_messages(chat, limit=1)
# Process message
except Exception as e:
# General error handling and retry
Код: Выделить всё
try:
await asyncio.gather(
reading_telegram.message_listener(),
monitoring_status.send_heartbeat()
)
except Exception as e:
logging.exception(f"An error occurred on reading_relegram.py: {e}")
Вопрос: Как обеспечить надежный перезапуск message_listener, если он обнаружит TimeoutError или остановится автоматически? Почему ни одно из моих исключений не улавливает это? Это ожидаемый результат телемарафона?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... meouterror