You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中捕获OpenAI API的所有5xx错误以实现重试?

捕获OpenAI API所有5xx错误并重试的实现方案

OpenAI Python SDK中,所有API相关异常都继承自OpenAIError基类,且这类异常实例都会携带status_code属性,我们可以利用这一点精准判断5xx错误。调整你的代码逻辑如下:

from openai import OpenAIError, InvalidRequestError

def call_openai_api(req, max_retries=3):
    current_retry = 0
    while current_retry < max_retries:
        try:
            response = openai.ChatCompletion.create(req)
            return response
        except InvalidRequestError as e:
            # 4xx类请求无效错误,重试无意义,直接上报
            reportError(e)
            raise
        except OpenAIError as e:
            # 捕获所有OpenAI API异常,判断是否为5xx状态码
            if 500 <= getattr(e, 'status_code', 0) < 600:
                current_retry += 1
                # 执行重试逻辑,可加入间隔等待避免频繁请求
                retry()
                continue
            # 非5xx的API错误,按需上报或处理
            reportError(e)
            raise
        except Exception as e:
            error_msg = f"Exception: {e}"
            reportError(error_msg)
            raise Exception(error_msg)
    # 达到最大重试次数仍失败,上报并抛出
    reportError("Max retries reached for 5xx errors")
    raise Exception("Max retries reached")

关键细节:

  • 优先捕获InvalidRequestError:这类属于客户端请求错误(如参数非法、权限不足),对应4xx状态码,重试无法解决,直接上报即可。
  • 通过OpenAIError基类兜底所有API异常,用status_code判断是否在500-599区间,触发重试逻辑。
  • 加入max_retries限制重试次数,避免无限循环,实际使用中可搭配time.sleep()增加重试间隔,降低服务器压力。
  • 用getattr(e, 'status_code', 0)做兼容处理,防止部分异常实例未携带状态码导致报错。

内容的提问来源于stack exchange,提问作者reika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:32:06