在我的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'))
我在这里缺少什么?
答案 0 :(得分:4)
你错过了Python命名空间的乐趣。 requests
库有自己的类requests.exceptions.ConnectionError
(http://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: