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

Python中处理API 404客户端异常及raise_for_status报错问题

正确处理API的404错误及返回数据

你的代码存在语法和逻辑错误,导致了报错,以下是问题点和修正方案:

问题根源

  1. 导入语句错误:不能用and连接导入语句,且无需导入urllib3.response,requests自身的响应对象完全够用。
  2. 函数定义不规范:def test_methods:缺少括号,正确写法是def test_methods():。
  3. 未实际发送请求:你只是把URL字符串赋值给变量,没有调用requests的请求方法(如get/post),自然得不到响应对象,调用raise_for_status()必然报错。
  4. 日志上下文问题:self.log需确保在类方法中使用,如果是普通函数,要换成标准日志或打印方法。

修正后的代码示例

import requests
import logging

# 初始化日志配置
logging.basicConfig(level=logging.ERROR)
logger = logging.getLogger(__name__)

def test_methods():
    try:
        # 替换为你的实际API地址,发送GET请求
        dvc_response = requests.get("https://your-api-url/endpoint")
        # 触发HTTP错误:状态码>=400时抛出HTTPError(包含404)
        dvc_response.raise_for_status()
        
        # 有数据时处理返回内容
        # 若API返回JSON格式用json(),纯文本用text
        response_data = dvc_response.json()
        print("成功获取数据:", response_data)
        # 后续业务逻辑...
        
    except requests.exceptions.HTTPError as e:
        # 捕获404等HTTP状态码错误
        logger.error(f"请求错误: {e}")
        # 打印错误响应内容(如果存在)
        if e.response:
            logger.error(f"错误详情: {e.response.text}")
    except requests.exceptions.RequestException as e:
        # 捕获其他请求异常(如连接超时、DNS失败等)
        logger.error(f"请求异常: {e}")

关键说明

  • requests.get()是实际发送请求的方法,返回的dvc_response是requests响应对象,自带raise_for_status()方法。
  • raise_for_status()会在响应状态码≥400时抛出HTTPError,404属于此类,会被对应的异常块捕获。
  • 分层捕获异常:先处理HTTP状态码错误,再处理其他请求相关异常,避免遗漏场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:50:08