簡體   English   中英

HTTP響應代碼的Python異常

[英]Python exception for HTTP response codes

當查詢API的HTTP響應代碼不是200時,我想提出一個Python標准異常,但是我應該使用什么特定的異常? 現在我提出一個OSError:

if response.status_code != 200:
  raise OSError("Response " + str(response.status_code)
                  + ": " + response.content)

我知道內置異常文檔

您只需在響應中調用Response.raise_for_status()即可:

>>> import requests
>>> url = 'http://stackoverflow.com/doesnt-exist'
>>> r = requests.get(url)
>>>
>>> print r.status_code
404
>>> r.raise_for_status()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "requests/models.py", line 831, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found

這將針對任何4xx5xx響應引發requests.HTTPError

有關更完整的示例,請參閱響應狀態代碼上的文檔。


請注意,這正是你問什么( status != 200這不會引發例外) 201 Created204 No Content ,或任何的3xx重定向-但是這是最有可能你想要的行為: requests將只需按照重定向,如果您正在處理API,其他2xx通常就可以了。

內置的Python異常可能不適合您正在做的事情。 您將希望子類化基類Exception ,並根據您要通信的每個方案拋出自己的自定義異常。

一個很好的例子是Python Requests HTTP庫如何定義自己的異常

如果出現網絡問題(例如DNS故障,拒絕連接等),請求將引發ConnectionError異常。

在極少數情況下,HTTP響應無效,請求將引發HTTPError異常。

如果請求Timeout則會引發Timeout異常。

如果請求超過配置的最大重定向數,則會引發TooManyRedirects異常。

Requests顯式引發的所有異常都是從requests.exceptions.RequestException繼承的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM