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

Python调用Spotify API返回404错误 异常捕获跳过失效解决方法

核心原因

裸except捕获失效基本是两个原因:

  1. 你用的Spotify请求SDK(最常见的是spotipy)默认不会将404类HTTP错误抛出为顶层异常,错误在SDK内部被处理后仅打印日志,不会走到外层except分支
  2. 异常触发点在merge_info函数内部被提前捕获吞掉,没有向外层抛出
可行方案

不要等异常被动触发,主动做多层校验,稳定性更高:

  • 第一层:在请求返回后第一时间校验HTTP状态码,遇到404直接返回空值跳过,不进入后续解析逻辑
  • 第二层:针对性捕获对应SDK/请求库的指定异常类型,不要用无差别的裸except,避免吞掉关键系统级错误
  • 第三层:对查询参数做预处理,把参数里的HTML转义字符比如&替换为原生&,减少因参数格式错误触发的无效404
代码参考

如果是直接用requests库写请求逻辑,按如下方式修改:

import requests
from requests.exceptions import HTTPError

def merge_info(album_name):
    # 原有参数构造逻辑,新增转义字符替换
    search_q = f'album:{album_name}'.replace('&', '&')
    req_params = {
        'q': search_q,
        'limit': 10,
        'offset': 0,
        'type': 'album',
        'market': None
    }
    resp = requests.get(
        "https://api.spotify.com/v1/search",
        params=req_params,
        headers={"Authorization": f"Bearer {你的access_token}"}
    )
    # 主动判断404,直接返回空
    if resp.status_code == 404:
        print(f"[跳过] 未找到专辑:{album_name}")
        return None
    # 其他HTTP错误主动抛出
    resp.raise_for_status()
    # 原有专辑信息解析、合并逻辑
    return parsed_result

rows = []
for album_1 in all_albums:
    try:
        album_info = merge_info(album_1)
        if album_info:
            rows.append(album_info)
    except HTTPError as e:
        print(f"[跳过] 请求专辑{album_1}出错:{str(e)}")
        continue

如果是用官方spotipySDK,注意捕获SDK自定义异常:

import spotipy
from spotipy.exceptions import SpotifyException

# 初始化客户端时不要开启静默错误模式
sp = spotipy.Spotify(auth_manager=你的鉴权实例)

rows = []
for album_1 in all_albums:
    try:
        search_res = sp.search(
            q=f'album:{album_1}'.replace('&', '&'),
            type='album',
            limit=10,
            offset=0
        )
        rows.append(merge_info(search_res))
    except SpotifyException as e:
        if e.http_status == 404:
            print(f"[跳过] 未找到专辑:{album_1}")
            continue
        print(f"[跳过] 请求专辑{album_1}异常:{str(e)}")

补充说明:裸except会捕获包括KeyboardInterrupt、MemoryError在内的所有系统级异常,排查问题时会完全看不到报错栈,生产场景下禁止使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:30:10