我可能以错误的方式处理此问题,但发出了POST请求:
response = requests.post(full_url, json.dumps(data))
可能由于多种原因而失败,某些原因与数据有关,某些原因是暂时性故障,由于端点设计不当而导致的故障很可能会因为相同的错误而返回(服务器对无效数据执行不可预测的事情)。为了 catch 这些暂时的失败并让其他人通过,我认为解决此问题的最佳方法是重试一次,然后再次出现错误,然后继续操作。我相信我可以使用嵌套的try/except来做到这一点,但对我来说似乎是一种不好的做法(如果我想在放弃之前再尝试两次,该怎么办?)
该解决方案将是:
try:
response = requests.post(full_url, json.dumps(data))
except RequestException:
try:
response = requests.post(full_url, json.dumps(data))
except:
continue
有一个更好的方法吗?或者,是否有一般更好的方法来处理潜在的错误HTTP响应?
最佳答案
for _ in range(2):
try:
response = requests.post(full_url, json.dumps(data))
break
except RequestException:
pass
else:
raise # both tries failed
如果您需要此功能:
def multiple_tries(func, times, exceptions):
for _ in range(times):
try:
return func()
except Exception as e:
if not isinstance(e, exceptions):
raise # reraises unexpected exceptions
raise # reraises if attempts are unsuccessful
像这样使用:
func = lambda:requests.post(full_url, json.dumps(data))
response = multiple_tries(func, 2, RequestException)
关于python - 如何在Python异常中仅重试一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18152564/