requests.exceptions.ReadTImeout未被捕获

时间:2018-06-13 10:28:53

标签: python python-requests

我对这段代码遇到了一些问题,我无法弄清楚原因。

当我跑步时:

try:
     r = requests.get('https://httpbin.org/get',
                      timeout=10,
                      headers={'Cache-Control': 'nocache', 'Pragma': 'nocache'})
    r.raise_for_status()
    return r.json()
except (requests.exceptions.RequestException, ValueError):
     return False
     

注意:主机已更改为隐私,实际服务方式   更不稳定/越野车。

我偶尔会遇到这个错误:

  

requests.exceptions.ReadTimeout:HTTPConnectionPool(host ='https://httpbin.org/get',port = 80):读取超时。 (读取超时= 10)

我无法理解出了什么问题;
我似乎正在正确地抓住requests.exceptions.RequestException的{​​{1}}的超集/父母requests.exceptions.ReadTimeout

编辑:似乎更新请求已经修复了它。

1 个答案:

答案 0 :(得分:0)

复制错误会很好,到目前为止我尝试过下面的代码, 但它仍然会暂停。

import requests 

try:
   r = requests.get('http://httpstat.us/200?sleep=1000',
                     timeout=0.01,
                     headers={'Cache-Control': 'nocache', 'Pragma': 'nocache'})
   r.raise_for_status()
   print(r.json())
except (requests.exceptions.RequestException, ValueError) as e:
    print('Error caught!') 
    print(e)

打印:

Error caught!
HTTPConnectionPool(host='192.168.1.120', port=8080): Read timed out. (read timeout=0.01)

即使是最小的形式,你仍然会抓住requests.exceptions.ReadTimeout

try:
    raise requests.exceptions.ReadTimeout
except requests.exceptions.RequestException:
    print('Caught ReadTimeout')

我最好的猜测是,您的异常出现在代码的其他部分,但不是在此示例中。