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
相关产品推荐
相关产品推荐

