httpx 异常

2022-07-26 17:04 更新

请求和响应异常

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}")
class httpx.RequestError(message*request=None)
发出 .request() 时可能发生的所有异常的基类。
class httpx.TransportError(message*request=None)

在传输 API 级别发生的所有异常的基类。

class httpx.TimeoutException(message*request=None)
超时错误的基类。
操作已超时。
class httpx.ConnectTimeout(message*request=None)

连接到主机时超时。

class httpx.ReadTimeout(message*request=None)

从主机接收数据时超时。

class ​httpx.WriteTimeout​(message, *, request=None)

向主机发送数据时超时。

class httpx.PoolTimeout(message*request=None)
等待从池获取连接时超时。
class httpx.NetworkError(message*request=None)
网络相关错误的基类。
与网络交互时出错。
class httpx.ConnectError(message*request=None)

无法建立连接。

class 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()​的情况下,试图访问流媒体请求内容。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号