HTTPX 中最重要的異常類是?RequestError
?和?HTTPStatusError
?。
?RequestError
?類是一個超類,它包含發(fā)出 HTTP 請求時發(fā)生的任何異常。這些例外包括一個?.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}.")
還有一個包含這兩個類別的基類?HTTPError
?,可用于捕獲失敗的請求或 4xx 和 5xx 響應(yīng)。
您可以使用此基類來捕獲這兩個類別...
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
?的基類。
在發(fā)出請求,然后調(diào)用?.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)發(fā)出 .request() 時可能發(fā)生的所有異常的基類。
httpx.TransportError
(message, *, request=None)在傳輸 API 級別發(fā)生的所有異常的基類。
httpx.TimeoutException
(message, *, request=None)超時錯誤的基類。
操作已超時。
httpx.ConnectTimeout
(message, *, request=None)連接到主機時超時。
httpx.ReadTimeout
(message, *, request=None)從主機接收數(shù)據(jù)時超時。
class ?httpx.WriteTimeout
?(message, *, request=None)
向主機發(fā)送數(shù)據(jù)時超時。
httpx.PoolTimeout
(message, *, request=None)等待從池獲取連接時超時。
httpx.NetworkError
(message, *, request=None)網(wǎng)絡(luò)相關(guān)錯誤的基類。
與網(wǎng)絡(luò)交互時出錯。
httpx.ConnectError
(message, *, request=None)無法建立連接。
httpx.ReadError
(message, *, request=None)無法從網(wǎng)絡(luò)接收數(shù)據(jù)。
class ?httpx.WriteError
?(message, *, request=None)
無法通過網(wǎng)絡(luò)發(fā)送數(shù)據(jù)。
class ?httpx.CloseError
?(message, *, request=None)
無法關(guān)閉連接。
class ?httpx.ProtocolError
?(message, *, request=None)
該協(xié)議被違反。
class ?httpx.LocalProtocolError
?(message, *, request=None)
客戶端違反了協(xié)議。
例如,如果用戶顯式實例化了一個 ?Request
?實例,但未能包含強制 ?Host:
?標(biāo)頭,然后直接使用 ?client.send()
?發(fā)出它。
class ?httpx.RemoteProtocolError
?(message, *, request=None)
服務(wù)器違反了該協(xié)議。
例如,返回格式錯誤的 HTTP。
class? httpx.ProxyError
?(message, *, request=None)
建立代理連接時出錯。
class ?httpx.UnsupportedProtocol
?(message, *, request=None)
試圖向不受支持的協(xié)議發(fā)出請求。
例如向 ?ftp://www.example.com
?發(fā)出請求。
class ?httpx.DecodingError
?(message, *, request=None)
由于編碼格式不正確,響應(yīng)解碼失敗。
class? httpx.TooManyRedirects
?(message, *, request=None)
重定向太多。
class ?httpx.HTTPStatusError
?(message, *, request, response)
響應(yīng)的錯誤 HTTP 狀態(tài)為 4xx 或 5xx。
調(diào)用 ?response.raise_for_status()
? 時可能會引發(fā)
class ?httpx.InvalidURL
?(message)
URL 格式不正確或無法解析。
class ?httpx.CookieConflict
?(message)
嘗試按名稱查找 cookie,但存在多個 cookie。
調(diào)用 ?response.cookies.get(...)
?時可能發(fā)生。
class httpx.StreamError
(message)
流異常的基類。
開發(fā)人員在以無效方式訪問請求流時出錯。
class ?httpx.?
??()StreamConsumed
class已嘗試讀取或流式傳輸內(nèi)容,但內(nèi)容已流式傳輸。
httpx.StreamClosed
()class已嘗試讀取或流式傳輸響應(yīng)內(nèi)容,但請求已關(guān)閉。
httpx.ResponseNotRead
()試圖訪問流式響應(yīng)內(nèi)容,而沒有調(diào)用?read()?。
class httpx.RequestNotRead()
在沒有調(diào)用?read()?的情況下,試圖訪問流媒體請求內(nèi)容。
更多建議: