Сообщить об ошибке.

Обработка исключений в цикле событий модуля asyncio в Python

Функции отладки низкоуровнего кода модуля asyncio

В разделе рассмотрены методы низкоуровнего API цикла событий, позволяющие настроить обработку исключений в асинхронном коде с применением модуля asyncio.

Прежде чем что-то делать с циклом событий, его необходимо создать или получить функциями, описанными в разделе "Создание, запуск и получение цикла событий".

Содержание:


loop.set_exception_handler(handler):

Метод loop.set_exception_handler() устанавливает как новый обработчик исключений цикла событий.

Если аргумент handler=None, то будет установлен обработчик исключений по умолчанию. В противном случае обработчик должен быть вызываемым объектом с соответствием сигнатуры (loop, context), где loop - это ссылка на активный цикл событий, а context - это объект dict, содержащий детали исключения.

Если обработчик handler вызывается от имени задачи или обработчика, то он запускается в contextvars.Context этой задачи или обратного вызова обработчика.

Изменено в Python 3.12: Обработчик handler может быть вызван в контексте задачи или обработчика, из которого возникло исключение.

Более подробно о контексте смотрите в описание метода loop.call_exception_handler().

loop.get_exception_handler():

Метод loop.get_exception_handler() возвращает текущий обработчик исключений или None, если пользовательский обработчик исключений не был установлен.

loop.default_exception_handler(context):

Метод loop.default_exception_handler() возвращает обработчик исключений по умолчанию.

Метод вызывается, когда возникает исключение, и обработчик исключений не установлен. Он может быть вызван настраиваемым обработчиком исключений, который будет откладывать поведение обработчика по умолчанию.

Аргумент context имеет то же значение, что и метод loop.call_exception_handler().

loop.call_exception_handler(context):

Метод loop.call_exception_handler() вызывает текущий обработчик исключений цикла событий.

Аргумент context - это объект словаря dict, содержащий следующие ключи (новые ключи могут быть введены в будущих версиях Python):

  • ‘message’: cообщение об ошибке;
  • ‘exception’ (optional): объект исключения;
  • ‘future’ (optional): экземпляр asyncio.Future;
  • ‘handle’ (optional): экземпляр asyncio.Handle;
  • ‘protocol’ (optional): экземпляр asyncio.Protocol;
  • ‘transport’ (optional): экземпляр asyncio.Transport;
  • ‘socket’ (optional): экземпляр socket.socket().

Обратите внимание, что этот метод не должен быть перегружен в циклах событий подклассов. Для пользовательской обработки исключений используйте метод loop.set_exception_handler().