Python请求库异常处理

Fra*_*ine 6 python exception http-status-code-503 python-requests

我正在使用python请求库(请参阅此处)创建下载服务,以从其他服务器下载数据.问题是,有时我得到一个503 error,我需要显示一个适当的消息.请参阅以下示例代码:

import requests
s = requests.Session()
response = s.get('http://mycustomserver.org/download')
Run Code Online (Sandbox Code Playgroud)

我可以检查response.status_code并获得status code = 200.但是我如何try/catch针对特定错误,在这种情况下,我希望能够503 error适当地检测和处理它们.

我怎么做?

Mar*_*cny 12

为什么不呢

class MyException(Exception);
   def __init__(self, error_code, error_msg):
       self.error_code = error_code
       self.error_msg = error_msg

import requests
s = requests.Session()
response = s.get('http://mycustomserver.org/download')

if response.status_code == 503:
    raise MyException(503, "503 error code")
Run Code Online (Sandbox Code Playgroud)

编辑:

看来请求库也会为你引发一个Exception response.raise_for_status()

>>> import requests
>>> requests.get('https://google.com/admin')
<Response [404]>
>>> response = requests.get('https://google.com/admin')
>>> response.raise_for_status()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 638, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error: Not Found
Run Code Online (Sandbox Code Playgroud)

EDIT2:

包裹raise_for_status以下内容try/except

try:
    if response.status_code == 503:
        response.raise_for_status()
except requests.exceptions.HTTPError as e: 
    if e.response.status_code == 503:
        #handle your 503 specific error
Run Code Online (Sandbox Code Playgroud)