我可能以错误的方式处理此问题,但发出了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/

10-10 11:31