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

dav*_*vid 5 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
Run Code Online (Sandbox Code Playgroud)

我仍然收到以下错误:

Exception Type: ConnectionError
Exception Value:    
('Connection aborted.', OSError(99, 'Cannot assign requested address'))
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?

Mat*_*yra 6

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

您的代码引用的类ConnectionError是 python 内置类ConnectionErrorhttps://docs.python.org/3.4/library/exceptions.html#ConnectionError)。

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

要解决此问题,您需要执行以下操作,这将覆盖对模块名称from requests.exceptions import ConnectionError空间内置的引用。ConnectionError

另一种可以说更干净的选择是捕获requests.exceptions.ConnectionError- 这可以清楚地表明您打算捕获哪个连接错误类。


ker*_*elp 4

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

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