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

Spotipy按曲目名搜索获取曲目、专辑、艺术家信息报KeyError

Spotipy 曲目搜索结果解析正确实现

错误原因

你的代码存在两处核心问题导致运行报错、取值失败:

  • 返回结果嵌套路径写错:Spotify 搜索接口返回的track类型结果,条目列表固定存放在results['tracks']['items']路径下,不存在你写的['artist']['album']中间层,路径错误直接导致取值异常。
  • 遍历与字段取值逻辑错误:
    • enumerate()遍历列表时,返回的元组结构是(索引, 单条列表元素),无法直接将单条曲目元素解包为artist, album, track三个变量
    • 单条曲目数据里,艺术家字段是列表结构(支持一首曲目绑定多位合作艺人),专辑信息是曲目下的嵌套对象,不存在你写的track['artist_id']、album['album']这类字段,自然触发KeyError。

正确实现代码

# 保留你自己的Spotipy鉴权初始化逻辑即可
track_keyword = "Pretend we're dead"
results = sp.search(q=f"track:{track_keyword}", type="track", limit=3)

# 索引从1开始计数,匹配你预期的输出序号
for idx, track_item in enumerate(results['tracks']['items'], start=1):
    # 逐字段取值
    track_name = track_item['name']
    main_artist = track_item['artists'][0]['name'] # 多艺人场景可遍历列表拼接所有艺人名称
    album_name = track_item['album']['name']
    print(f"{idx}. {track_name}, {main_artist}, {album_name}")

运行输出效果

执行上述代码后会得到你预期的结果:

1. Pretend We're Dead, L7, Bricks Are Heavy
2. Pretend We're Dead, L7, Pretend We're Dead - The Best Of
3. Pretend We're Dead - Remastered, L7, Fast & Frightning

调试提示

后续开发注意两个要点:

  • 遇到不确定的返回字段结构,可先执行print(results['tracks']['items'][0].keys())查看单条曲目的顶层字段,逐层向下确认结构后再写取值逻辑,避免因路径猜测错误触发KeyError。
  • 如果需要获取超过单页限制的搜索结果,可使用sp.next(results)方法逐页拉取剩余内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:06:25