httpx 異常

2022-07-26 17:04 更新

請(qǐng)求和響應(yīng)異常

HTTPX 中最重要的異常類是?RequestError?和?HTTPStatusError ?。

?RequestError?類是一個(gè)超類,它包含發(fā)出 HTTP 請(qǐng)求時(shí)發(fā)生的任何異常。這些例外包括一個(gè)?.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? 成功代碼的響應(yīng)引發(fā)。這些異常包括? .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}.")

還有一個(gè)包含這兩個(gè)類別的基類?HTTPError?,可用于捕獲失敗的請(qǐng)求或 4xx 和 5xx 響應(yīng)。

您可以使用此基類來(lái)捕獲這兩個(gè)類別...

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}.")

或者明確處理每個(gè)案例...

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}.")

異常層次結(jié)構(gòu)


異常類

class httpx.HTTPError(message)

?RequestError?和?HTTPStatusError?的基類。

在發(fā)出請(qǐng)求,然后調(diào)用?.raise_for_status() ?時(shí),對(duì)于?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)
發(fā)出 .request() 時(shí)可能發(fā)生的所有異常的基類。
class httpx.TransportError(message*request=None)

在傳輸 API 級(jí)別發(fā)生的所有異常的基類。

class httpx.TimeoutException(message*request=None)
超時(shí)錯(cuò)誤的基類。
操作已超時(shí)。
class httpx.ConnectTimeout(message*request=None)

連接到主機(jī)時(shí)超時(shí)。

class httpx.ReadTimeout(message*request=None)

從主機(jī)接收數(shù)據(jù)時(shí)超時(shí)。

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

向主機(jī)發(fā)送數(shù)據(jù)時(shí)超時(shí)。

class httpx.PoolTimeout(message*request=None)
等待從池獲取連接時(shí)超時(shí)。
class httpx.NetworkError(message*request=None)
網(wǎng)絡(luò)相關(guān)錯(cuò)誤的基類。
與網(wǎng)絡(luò)交互時(shí)出錯(cuò)。
class httpx.ConnectError(message*request=None)

無(wú)法建立連接。

class httpx.ReadError(message*request=None)
無(wú)法從網(wǎng)絡(luò)接收數(shù)據(jù)。

class ?httpx.WriteError?(message, *, request=None)

無(wú)法通過(guò)網(wǎng)絡(luò)發(fā)送數(shù)據(jù)。

class ?httpx.CloseError?(message, *, request=None)

無(wú)法關(guān)閉連接。

class ?httpx.ProtocolError?(message, *, request=None)

該協(xié)議被違反。

class ?httpx.LocalProtocolError?(message, *, request=None)

客戶端違反了協(xié)議。
例如,如果用戶顯式實(shí)例化了一個(gè) ?Request ?實(shí)例,但未能包含強(qiáng)制 ?Host: ?標(biāo)頭,然后直接使用 ?client.send() ?發(fā)出它。

class ?httpx.RemoteProtocolError?(message, *, request=None)

服務(wù)器違反了該協(xié)議。
例如,返回格式錯(cuò)誤的 HTTP。

class? httpx.ProxyError?(message, *, request=None)

建立代理連接時(shí)出錯(cuò)。

class ?httpx.UnsupportedProtocol?(message, *, request=None)

試圖向不受支持的協(xié)議發(fā)出請(qǐng)求。
例如向 ?ftp://www.example.com ?發(fā)出請(qǐng)求。

class ?httpx.DecodingError?(message, *, request=None)

由于編碼格式不正確,響應(yīng)解碼失敗。

class? httpx.TooManyRedirects?(message, *, request=None)

重定向太多。

class ?httpx.HTTPStatusError?(message, *, request, response)

響應(yīng)的錯(cuò)誤 HTTP 狀態(tài)為 4xx 或 5xx。
調(diào)用 ?response.raise_for_status()? 時(shí)可能會(huì)引發(fā)

class ?httpx.InvalidURL?(message)

URL 格式不正確或無(wú)法解析。

class ?httpx.CookieConflict?(message)

嘗試按名稱查找 cookie,但存在多個(gè) cookie。
調(diào)用 ?response.cookies.get(...) ?時(shí)可能發(fā)生。

class httpx.StreamError(message)

流異常的基類。
開(kāi)發(fā)人員在以無(wú)效方式訪問(wèn)請(qǐng)求流時(shí)出錯(cuò)。

class ?httpx.?StreamConsumed??()

已嘗試讀取或流式傳輸內(nèi)容,但內(nèi)容已流式傳輸。

class httpx.StreamClosed()

已嘗試讀取或流式傳輸響應(yīng)內(nèi)容,但請(qǐng)求已關(guān)閉。

class httpx.ResponseNotRead()

試圖訪問(wèn)流式響應(yīng)內(nèi)容,而沒(méi)有調(diào)用?read()?。

class httpx.RequestNotRead()

在沒(méi)有調(diào)用?read()?的情況下,試圖訪問(wèn)流媒體請(qǐng)求內(nèi)容。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)