我正在使用 while 循环轮询 API 端点,该循环检查 JSON 上的 .get() 方法是否返回 None:
while requests.get(render_execution_url, headers=headers).json().get('finalized_at') is None:
status = requests.get(render_execution_url, headers=headers).json().get('status')
status_detail = requests.get(render_execution_url, headers=headers).json().get('status_detail')
logger.info("status for {} is {}. detailed status is {}".format(render_execution_url, status, status_detail))
这里的想法是我们不断轮询端点,直到填充“finalized_at”值。
不幸的是,当 JSON 根本不存在时,我们会定期失败:
File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
我已经尝试在该方法上使用重试装饰器(有关装饰器语法,请参见下文),但是当我遇到此失败时,它似乎没有执行重试。
@retry(stop_max_attempt_number=7, wait_fixed=10000)
是否有一种优雅的 Pythonic 方式来处理 JSON 不存在的情况(即,在一段时间内再试一次)?