httpx 异常
请求和响应异常
HTTPX 中最重要的异常类是RequestError和HTTPStatusError 。
RequestError类是一个超类,它包含发出 HTTP 请求时发生的任何异常。这些例外包括一个.request属性。
try:
response = httpx.get("https://www.example.com/")
except httpx.RequestError as exc:
print(f"An error occurred while requesting {exc.request.url!r}.")HTTPStatusError类由response.raise_for_status()在不是 2xx 成功代码的响应引发。这些异常包括 .request 和.response属性。
response = httpx.get("https://www.example.com/")
try:
response.raise_for_status()
except httpx.HTTPStatusError as exc:
print(f"Error response {exc.response.status_code} while requesting {exc.request.url!r}.")还有一个包含这两个类别的基类HTTPError,可用于捕获失败的请求或 4xx 和 5xx 响应。
您可以使用此基类来捕获这两个类别...
try:
response = httpx.get("https://www.example.com/")
response.raise_for_status()
except httpx.HTTPError as exc:
print(f"Error while requesting {exc.request.url!r}.")或者明确处理每个案例...
try:
response = httpx.get("https://www.example.com/")
response.raise_for_status()
except httpx.RequestError as exc:
print(f"An error occurred while requesting {exc.request.url!r}.")
except httpx.HTTPStatusError as exc:
print(f"Error response {exc.response.status_code} while requesting {exc.request.url!r}.")异常层次结构

异常类
class httpx.HTTPError(message)RequestError和HTTPStatusError的基类。
在发出请求,然后调用.raise_for_status() 时,对于try...except块很有用。
例如:
try:
response = httpx.get("https://www.example.com")
response.raise_for_status()
except httpx.HTTPError as exc:
print(f"HTTP Exception for {exc.request.url} - {exc}")httpx.RequestError(message, *, request=None)发出 .request() 时可能发生的所有异常的基类。
httpx.TransportError(message, *, request=None)在传输 API 级别发生的所有异常的基类。
httpx.TimeoutException(message, *, request=None)超时错误的基类。
操作已超时。
httpx.ConnectTimeout(message, *, request=None)连接到主机时超时。
httpx.ReadTimeout(message, *, request=None)从主机接收数据时超时。
class httpx.WriteTimeout(message, *, request=None)
向主机发送数据时超时。
httpx.PoolTimeout(message, *, request=None)等待从池获取连接时超时。
httpx.NetworkError(message, *, request=None)网络相关错误的基类。
与网络交互时出错。
httpx.ConnectError(message, *, request=None)无法建立连接。
httpx.ReadError(message, *, request=None)无法从网络接收数据。
class httpx.WriteError(message, *, request=None)
无法通过网络发送数据。
class httpx.CloseError(message, *, request=None)
无法关闭连接。
class httpx.ProtocolError(message, *, request=None)
该协议被违反。
class httpx.LocalProtocolError(message, *, request=None)
客户端违反了协议。
例如,如果用户显式实例化了一个 Request实例,但未能包含强制 Host:标头,然后直接使用 client.send()发出它。
class httpx.RemoteProtocolError(message, *, request=None)
服务器违反了该协议。
例如,返回格式错误的 HTTP。
class httpx.ProxyError(message, *, request=None)
建立代理连接时出错。
class httpx.UnsupportedProtocol(message, *, request=None)
试图向不受支持的协议发出请求。
例如向 ftp://www.example.com发出请求。
class httpx.DecodingError(message, *, request=None)
由于编码格式不正确,响应解码失败。
class httpx.TooManyRedirects(message, *, request=None)
重定向太多。
class httpx.HTTPStatusError(message, *, request, response)
响应的错误 HTTP 状态为 4xx 或 5xx。
调用 response.raise_for_status() 时可能会引发
class httpx.InvalidURL(message)
URL 格式不正确或无法解析。
class httpx.CookieConflict(message)
尝试按名称查找 cookie,但存在多个 cookie。
调用 response.cookies.get(...)时可能发生。
class httpx.StreamError(message)
流异常的基类。
开发人员在以无效方式访问请求流时出错。
class httpx.()StreamConsumed
class已尝试读取或流式传输内容,但内容已流式传输。
httpx.StreamClosed()class已尝试读取或流式传输响应内容,但请求已关闭。
httpx.ResponseNotRead()试图访问流式响应内容,而没有调用read()。
class httpx.RequestNotRead()
在没有调用read()的情况下,试图访问流媒体请求内容。