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

Python requests请求返回429状态码时应抛出哪种合适的错误?

requests库429状态码错误处理方案

内置错误类型选择

requests库已经内置了requests.HTTPError类,专门用于抛出HTTP响应层面的错误,完全适配429(请求频率过高)这类场景,比通用的Exception、ValueError更符合语义。

常用处理方案

方案1:直接使用内置HTTPError(适配大多数场景)

你可以手动判断429状态码后抛出该异常,还可以传入响应对象方便上层捕获后获取Retry-After等响应头信息,示例代码如下:

import requests

response = requests.request('GET', url)

if response.status_code == 200:
    # 处理正常响应逻辑
    pass
elif response.status_code == 429:
    raise requests.HTTPError(
        'You made too many requests, please wait a minute and then try again',
        response=response
    )

如果你需要统一处理所有4xx、5xx类的HTTP错误,不需要单独判断429,直接调用内置方法即可:

response = requests.request('GET', url)
response.raise_for_status() # 所有非2xx类状态码都会自动抛出对应描述的HTTPError

方案2:自定义异常类(适合需要单独捕获429做特殊处理的场景)

如果你的上层逻辑需要单独区分429错误做重试、限流提示等特殊处理,可以自定义继承自requests.HTTPError的异常类,语义更清晰:

import requests

class TooManyRequestsError(requests.HTTPError):
    """请求频率超出限制,对应HTTP 429状态码"""
    pass

response = requests.request('GET', url)

if response.status_code == 200:
    pass
elif response.status_code == 429:
    raise TooManyRequestsError(
        'You made too many requests, please wait a minute and then try again',
        response=response
    )

异常捕获示例

上层捕获时可以根据需求选择捕获粒度:

import time

try:
    # 发送请求的逻辑
    send_request()
except TooManyRequestsError as e:
    # 单独处理429错误:比如读取Retry-After头等待后重试
    retry_after = int(e.response.headers.get('Retry-After', 60))
    time.sleep(retry_after)
    send_request()
except requests.HTTPError as e:
    # 处理其他HTTP错误
    print(f"HTTP请求错误:{e}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:48:00