使用Spotify API获取曲目数据时遇“None不可下标”错误求助
问题:Spotipy调用
playlist_tracks返回None导致下标访问错误 我用Spotipy库从Spotify播放列表链接提取曲目信息(专辑名、艺术家名等),但代码里sp.playlist_tracks(playlist_id=playlist_uri)['items']触发了<Object of type "None" is not subscriptable>错误。我知道这个错误的含义,但搞不清和代码的关联,排查后仍需帮助。我的代码如下:
client_credentials_manager = SpotifyClientCredentials(client_id = client_id, client_secret= client_secret) sp = spotipy.Spotify(client_credentials_manager = client_credentials_manager) # Playlist link link = "https://open.spotify.com/playlist/37i9dQZF1DX2Zjg8kBuEsQ" # Get the URI of the playlist playlist_uri = link.split("/")[-1] # Get track information item for each track in the playlist uris = [x for x in sp.playlist_tracks(playlist_id=playlist_uri)['items']]
错误原因与解决方法
这个错误的核心是sp.playlist_tracks()返回了None,你直接对None做['items']下标访问才触发报错。以下是常见问题和修复方案:
1. Playlist URI可能包含多余参数
如果你的播放列表链接末尾带有?si=xxx这类参数,split("/")[-1]会把参数也包含进去,导致API识别失败返回None。修正代码:
# 截断URI后的参数部分 playlist_uri = link.split("/")[-1].split("?")[0]
2. API授权失败
确认client_id和client_secret是否正确,有没有拼写错误或权限问题。可以先测试基础授权:
# 测试授权是否正常 test_user = sp.user("spotify") if test_user is None: print("授权失败,请检查client_id和client_secret")
3. 增加失败判断逻辑
避免直接对API返回值做下标访问,先判断是否获取成功:
playlist_data = sp.playlist_tracks(playlist_id=playlist_uri) if playlist_data: uris = [x for x in playlist_data['items']] else: print("获取播放列表数据失败,请检查URI或授权信息")
4. 播放列表权限问题
Client Credentials Flow只能访问公开播放列表,如果目标播放列表是私有的,API会返回None。确认播放列表是否设置为公开状态。
内容的提问来源于stack exchange,提问作者SEJUNG CHUN
相关产品推荐
相关产品推荐

