yay*_*ayu 0 python exception python-requests
我想知道是否存在一种常见的模式,可以重试请求一定次数(由于服务器错误或网络故障而导致失败)。我想出了这个,我愿意在那里找到更好的实现。
cnt=0
while cnt < 3:
try:
response = requests.get(uri)
if response.status_code == requests.codes.ok:
return json.loads(response.text)
except requests.exceptions.RequestException:
continue
cnt += 1
return False
Run Code Online (Sandbox Code Playgroud)
您可能要考虑在重试之间引入等待,因为许多暂时性问题可能需要花费几秒钟以上的时间才能解决。另外,我建议以几何方式增加等待时间,以便有足够的时间使系统恢复:
import time
cnt=0
max_retry=3
while cnt < max_retry:
try:
response = requests.get(uri)
if response.status_code == requests.codes.ok:
return json.loads(response.text)
else:
# Raise a custom exception
except requests.exceptions.RequestException as e:
time.sleep(2**cnt)
cnt += 1
if cnt >= max_retry:
raise e
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您的重试将在1、2和4秒后发生。只要注意最大的重试次数。您将重试次数增加到10,然后您知道代码将等待17分钟。
编辑:
仔细查看您的代码,false当您用尽重试后再返回实际上没有任何意义。您确实应该向调用者提出异常,以便可以传达问题。另外,您检查requests.codes.ok但没有else动作定义。
| 归档时间: |
|
| 查看次数: |
1150 次 |
| 最近记录: |