Python中处理API 404客户端异常及raise_for_status报错问题
正确处理API的404错误及返回数据
你的代码存在语法和逻辑错误,导致了报错,以下是问题点和修正方案:
问题根源
- 导入语句错误:不能用
and连接导入语句,且无需导入urllib3.response,requests自身的响应对象完全够用。 - 函数定义不规范:
def test_methods:缺少括号,正确写法是def test_methods():。 - 未实际发送请求:你只是把URL字符串赋值给变量,没有调用requests的请求方法(如
get/post),自然得不到响应对象,调用raise_for_status()必然报错。 - 日志上下文问题:
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
相关产品推荐
相关产品推荐

