python请求超时异常session.get()与request.get()差异/差异

时间:2020-03-09 17:32:44

标签: python http python-requests

在测试我的代码在超时情况下的行为时,我遇到了以下观察。当我通过以下方式发出请求时:

A。 requests.get('http://xxx.yy.com:8080/', timeout=(10.0001,0.000001)),堆栈跟踪和Exception触发如下:

/.../anaconda3/lib/python3.4/site-packages/requests/sessions.py in send(self, request, **kwargs)
    571
    572         # Send the request
--> 573         r = adapter.send(request, **kwargs)
    574
    575         # Total elapsed time of the request (approximately)

/.../anaconda3/lib/python3.4/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    431                 raise SSLError(e, request=request)
    432             elif isinstance(e, ReadTimeoutError):
--> 433                 raise ReadTimeout(e, request=request)
    434             else:
    435                 raise

ReadTimeout: HTTPConnectionPool(host='xxx.yy.com', port=8080): Read timed out. (read timeout=1e-06)

B。 session.get('http://xxx.yy.com:8080/', timeout=(10.0001,0.000001)),堆栈跟踪和Exception触发如下:

/.../anaconda3/lib/python3.4/site-packages/requests/sessions.py in send(self, request, **kwargs)
    571
    572         # Send the request
--> 573         r = adapter.send(request, **kwargs)
    574
    575         # Total elapsed time of the request (approximately)

/.../anaconda3/lib/python3.4/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    422                 raise RetryError(e, request=request)
    423
--> 424             raise ConnectionError(e, request=request)
    425
    426         except _ProxyError as e:

ConnectionError: HTTPConnectionPool(host='xxx.yy.com', port=8080): Max retries exceeded with url: / (Caused by ReadTimeoutError("HTTPConnectionPool(host='xxx.yy.com', port=8080): Read timed out. (read timeout=1e-06)",))

但是,就异常处理而言,这是根本不同的最终结果,令人惊讶! -似乎在使用session.get时,需要抓住ConnectionError而不是ReadTimeout吗?这很不直观。有人可以建议吗?为什么会有所不同,以及如何/如何捕捉代码?

这是针对2.7.0版的请求。

0 个答案:

没有答案