为什么我不能使用try / except块“忽略”这个ConnectionError?

时间:2018-01-21 18:21:01

标签: python python-requests

在我的django项目中,我正在调用一些数据。

我已经组织了下面的代码,以便如果get请求失败,它将被忽略,并且函数的其余部分将继续(如果这是不好的做法,请不要讲课)。

job_results=[]
try:
    resp = requests.get(mongo_job_results)
    for item in resp.json():
        job_results.append(item)
except ConnectionError:
    pass

我仍然收到以下错误:

Exception Type: ConnectionError
Exception Value:    
('Connection aborted.', OSError(99, 'Cannot assign requested address'))

我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

你错过了Python命名空间的乐趣。 requests库有自己的类requests.exceptions.ConnectionErrorhttp://docs.python-requests.org/en/master/api/#requests.ConnectionError)。 get调用引发了此类的一个实例。

您代码所指的ConnectionError类是内置的ConnectionError https://docs.python.org/3.4/library/exceptions.html#ConnectionError}。

这两个类不是同一个类,因此解释器最终不会执行except块,因为您没有捕获引发的类的实例。

要解决此问题,您需要执行from requests.exceptions import ConnectionError,它将覆盖模块命名空间内置ConnectionError的引用。

另一种可以说是更清晰的选择就是捕获requests.exceptions.ConnectionError - 这样可以清楚地表明您想要捕获哪个连接错误类。

答案 1 :(得分:3)

尝试捕获requests connectionError (而不是 OSError 的子类)。

所以而不是 except ConnectionError:except requests.exceptions.ConnectionError: