Python';非类型';尝试访问字典数据时出现TypeError
我正在通过Spotipy使用Spotify的API,并试图获得曲目的名称。我在Javascript中使用了相当多的API,在尝试做基本相同的事情时没有遇到任何问题,我在这里遇到了一堵墙 基本上,我使用这个端点获取给定播放列表的曲目,并尝试提取曲目的名称 这将输出给定轨迹的“轨迹对象”:Python';非类型';尝试访问字典数据时出现TypeError,python,django,spotify,nonetype,spotipy,Python,Django,Spotify,Nonetype,Spotipy,我正在通过Spotipy使用Spotify的API,并试图获得曲目的名称。我在Javascript中使用了相当多的API,在尝试做基本相同的事情时没有遇到任何问题,我在这里遇到了一堵墙 基本上,我使用这个端点获取给定播放列表的曲目,并尝试提取曲目的名称 这将输出给定轨迹的“轨迹对象”: playlist_items = spotify.playlist_tracks(playlist_nameid[playlist])['items'] for item in playlist_
playlist_items = spotify.playlist_tracks(playlist_nameid[playlist])['items']
for item in playlist_items:
track_object = item['track']
我知道我正在覆盖track_对象,我刚刚将其剥离以进行测试
如果我尝试track\u object=item['track']['name']
我会得到错误
TypeError at /radio/login
'NoneType' object is not subscriptable
为了确保
item['track']
是一个可订阅的对象,我尝试了type(item['track'])
,结果是{}
。在这一点上我很困惑,因为错误似乎告诉我dictionary对象的类型是“none”。任何帮助都将不胜感激。播放列表中的项目之一\u items为无或项目['track']
为无。以下可能更适合您:
item.get('track', {}).get('name')
您可以使用以下选项筛选出无项目:
for item in playlist_items:
if item is None:
continue
或者,您可以通过以下方式保护原始提取:
item and item.get('track', {}).get('name')
我在@schillingt的帮助下找到了答案——过滤无项是正确的方法。我没有过滤播放列表项,而是过滤曲目对象 这将返回播放列表的曲目名称列表:
playlist_items = spotify.playlist_tracks(playlist_nameid[playlist])['items']
title = []
for item in playlist_items:
if item['track'] is None:
continue
else:
title.append(item['track']['name'])
这给了我一个错误
AttributeError at/radio/login'NoneType'对象没有属性'get'
,虽然如果我删除.get('name')
,它会给我track对象。那么肯定是其中一个实例是none。我尝试了过滤none项和保护原始获取,并同时执行这两个操作,它仍然给出了同样的错误。这就是我拥有的:playlist\u items=spotify.playlist\u曲目(playlist\u nameid[playlist])['items']用于播放列表中的项目\u items:如果项目为无:继续跟踪\u object=item和item.get('track',{}).get('name')