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()的情况下,试图访问流媒体请求内容。
更多建议: