Когда вызывается asyncio.StreamReader.read (), какой тип ошибки возникает? - PullRequest
0 голосов
/ 12 мая 2018

Теперь я делаю TCP-сервер с asyncio.

Я хочу добавить обработку ошибок в моем коде. (как показано ниже)

    try:
        data = await reader.read(SERVER_IO_BUFFER_SIZE)
    except SomeError:
        #error handle

Итак, я смотрю официальный документ asyncio.

но я не могу найти информацию об ошибках, которые могут возникнуть.

(ссылка: https://docs.python.org/3/library/asyncio-stream.html#asyncio.StreamReader.read)

Как я могу получить информацию об ошибках, которые могут произойти?

1 Ответ

0 голосов
/ 12 мая 2018

Точные ошибки, которые могут возникнуть, будут зависеть от типа потока за StreamReader.Реализация, которая обращается к сокету, вызовет IOError, в то время как реализация, которая читает данные из базы данных, может вызвать некоторые специфичные для базы данных ошибки.

Если вы имеете дело с сетью, например, через asyncio.open_connection или asyncio.start_server, можно ожидать экземпляры IOError и его подклассов.Другими словами, используйте except IOError as e.

Также, если сопрограмма отменяется, вы можете получить asyncio.CancelledError в любой await.Вы, вероятно, не хотите обрабатывать это исключение - просто дайте ему распространиться, и обязательно используйте соответствующие finally предложения или with менеджеры контекста для обеспечения очистки.(Эта последняя часть - хорошая идея, независимо от CancelledError.)

...