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

自定义Retry类设置BACKOFF_MAX时遇参数缺失异常的解决求助

解决方案

核心思路

urllib3 的 Retry.new() 方法在生成新实例时,仅会传递其内置的参数,不会自动包含你自定义的 backoff_max。因此需要在自定义的 RetryRequest 类中重写 new() 方法,主动将该参数传递给新实例。

代码实现

重写自定义重试类

from urllib3.util.retry import Retry

class RetryRequest(Retry):
    def __init__(self, backoff_max, *args, **kwargs):
        self.backoff_max = backoff_max
        super().__init__(*args, **kwargs)

    def new(self, **kwargs):
        # 将当前实例的 backoff_max 注入新实例参数
        kwargs['backoff_max'] = self.backoff_max
        return super().new(**kwargs)

会话创建逻辑保持不变

import requests
from requests.adapters import HTTPAdapter

def create_session(backoff_max, retries=3, status_forcelist=(500, 502, 504)):
    session = requests.Session()
    retry_strategy = RetryRequest(
        backoff_max=backoff_max,
        total=retries,
        status_forcelist=status_forcelist,
        allowed_methods=["GET", "POST"]
    )
    adapter = HTTPAdapter(max_retries=retry_strategy)
    session.mount("https://", adapter)
    session.mount("http://", adapter)
    return session

原理说明

当 urllib3 在重试流程中调用 retries.increment() 时,会触发 new() 方法生成新的重试实例。重写后的 new() 方法会主动把当前实例的 backoff_max 加入参数列表,确保新实例初始化时不会缺失该必填参数,同时无需为 backoff_max 设置默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:02:35