因此,在请求后,我有一个非常通用的日志记录语句:

try:
    r = requests.get(testUrl, timeout=10.0)
except Exception, err:
    logger.error({"message": err.message})

除了TimeoutError之外,这对我所扔的所有东西都非常有用。当请求超时时,我得到的是一个元组,它尝试并且无法序列化。

我的问题是我该如何捕捉这种错误?对于初学者来说,TimeoutError不是我可以访问的东西。我尝试添加from exceptions import *但没有运气。我也尝试导入OSError,因为文档说TimeoutError是一个子类,但是导入TimeoutError后我无法访问OSError

TimeoutError docs

我计划按顺序列出我的异常(exception)情况:
except TimeoutError, err:
     #handle this specific error
except Exception, err:
     #handle all other errors

或只是检查类型:
except Exception, err:
    if isinstance(err, TimeoutError):
        #handle specific error
    #handle all other errors

Python 2.7.3和Django 1.5

最佳答案

您可以处理 requests.Timeout 异常:

try:
    r = requests.get(testUrl, timeout=10.0)
except requests.Timeout as err:
    logger.error({"message": err.message})
except requests.RequestException as err:
    # handle other errors

例子:
>>> import requests
>>> url = "http://httpbin.org/delay/2"
>>> try:
...     r = requests.get(url, timeout=1)
... except requests.Timeout as err:
...     print(err.message)
...
HTTPConnectionPool(host='httpbin.org', port=80): Read timed out. (read timeout=1)

10-06 09:35