Python Glossary English

Python 3.5+http.clientисключение

http.client.RemoteDisconnected

исключения

Сервер закрыл соединение, не прислав ни байта ответа. Наследует и ConnectionResetError, и BadStatusLine. Появилось в Python 3.5.

Синтаксис

except http.client.RemoteDisconnected: reconnect and retry

Классический случай — keep-alive: соединение простояло, сервер тихо его закрыл, и следующий запрос по нему натыкается на пустоту. Правильная реакция — переоткрыть соединение и повторить запрос, если метод идемпотентный. Благодаря двойному наследованию её ловят и except OSError, и except http.client.HTTPException. Если обрыв случился посреди тела, будет IncompleteRead, а не это исключение.

Примеры

import http.client
import socket
server, client = socket.socketpair()
server.sendall(b'')
server.close()
resp = http.client.HTTPResponse(client)
try:
    resp.begin()
except ConnectionResetError as e:
    print(type(e).__name__, '-', e)  # → RemoteDisconnected - Remote end closed connection without response
    print(isinstance(e, http.client.BadStatusLine))  # → True
client.close()

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности