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}.")
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}")
httpx.RequestError
(message, *, request=None)發(fā)出 .request() 時(shí)可能發(fā)生的所有異常的基類。
httpx.TransportError
(message, *, request=None)在傳輸 API 級(jí)別發(fā)生的所有異常的基類。
httpx.TimeoutException
(message, *, request=None)超時(shí)錯(cuò)誤的基類。
操作已超時(shí)。
httpx.ConnectTimeout
(message, *, request=None)連接到主機(jī)時(shí)超時(shí)。
httpx.ReadTimeout
(message, *, request=None)從主機(jī)接收數(shù)據(jù)時(shí)超時(shí)。
class ?httpx.WriteTimeout
?(message, *, request=None)
向主機(jī)發(fā)送數(shù)據(jù)時(shí)超時(shí)。
httpx.PoolTimeout
(message, *, request=None)等待從池獲取連接時(shí)超時(shí)。
httpx.NetworkError
(message, *, request=None)網(wǎng)絡(luò)相關(guān)錯(cuò)誤的基類。
與網(wǎng)絡(luò)交互時(shí)出錯(cuò)。
httpx.ConnectError
(message, *, request=None)無(wú)法建立連接。
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
class已嘗試讀取或流式傳輸內(nèi)容,但內(nèi)容已流式傳輸。
httpx.StreamClosed
()class已嘗試讀取或流式傳輸響應(yīng)內(nèi)容,但請(qǐng)求已關(guān)閉。
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)容。
更多建議: