使用requests
python lib,我发出GET请求,并处理超时异常(以及我不会在此处显示的其他异常),例如
import requests
timeout1=20
timeout2=40
try:
#first attempt
resp = requests.get(base_url+resource, params=payload, headers=headers,
timeout=timeout1)
except requests.exceptions.Timeout:
#timed out, retry once
try:
resp = requests.get(base_url+resource, params=payload, headers=headers,
timeout=timeout2)
return resp.json()
except requests.exceptions.RequestException as e:
#Still failed; return error code
return -1
大部分时间都可以正常运行,但是有时我的程序会完全退出并显示错误socket.timeout: timed out
,而不是抛出requests.exceptions.Timeout
,这会被抓住并处理。
为什么请求lib的行为如下?我该怎么办呢?
答案 0 :(得分:1)
答案:
try:
data = sock.recv(256)
except socket.timeout:
data="NO RESPONSE"
它不会退出!
答案 1 :(得分:1)
我认为这是请求使用的urllib3的问题:
https://github.com/kennethreitz/requests/issues/1236
你必须抓住socket.timeout错误。 (基于jb在Correct way to try/except using Python requests module?的评论)