pythonspot_python-Spotipy-列表索引超出范围
編寫Spotipy腳本以從給定專輯返回專輯曲目,我偶爾會遇到錯誤:
album_id = results["albums"]["items"][0]["uri"]
IndexError: list index out of range
這種錯誤往往發(fā)生在更多的流行歌手遍歷所有專輯的時(shí)候.我猜結(jié)果列表已達(dá)到極限或以某種方式亂序.無論哪種方式,我都不確定如何解決它,因?yàn)槲液艽_定我從Spotipy網(wǎng)站上獲得了album_id.有任何想法嗎?
#!/usr/bin/python
# -*- coding: utf-8 -*-
import spotipy
sp = spotipy.Spotify()
sp.trace = False
def get_artist_albums(artist):
results = sp.search(q = "artist:" + artist, type = "artist")
items = results["artists"]["items"]
artist = items[0]
# print artist
albums = []
albumsTitles = []
results = sp.artist_albums(artist["id"], album_type = "album")
albums.extend(results["items"])
while results["next"]:
results = sp.next(results)
albums.extend(results["items"])
seen = set() # to avoid dups
albums.sort(key = lambda album:album["name"].lower())
for album in albums:
albumTitle = album["name"]
if albumTitle not in seen:
print((" " + albumTitle))
seen.add(albumTitle)
albumsTitles.append(albumTitle)
# return albumsTitles
return albumsTitles
def get_albums_tracks(album):
albumtracks = []
results = sp.search(q = "album:" + album, type = "album")
# get the first album uri
album_id = results["albums"]["items"][0]["uri"]
# get album tracks
tracks = sp.album_tracks(album_id)
c = 1
# print album
for track in tracks["items"]:
# print "#%s %s" %(c, track["name"])
albumtracks.append(track["name"])
c +=1
return albumtracks
# 3 album band - ok
phosgoreAlbums = get_artist_albums("Phosgore")
for item in phosgoreAlbums:
print get_albums_tracks(item)
print ""
# 6 album band - ok
# (well technically 2, but's let not get into that night now)
joyDivisionAlbums = get_artist_albums("Joy Division")
for item in joyDivisionAlbums:
print get_albums_tracks(item)
print ""
# 34 albums - falls over
cherAlbums = get_artist_albums("Cher")
for item in cherAlbums:
print get_albums_tracks(item)
print ""
# 38 album band - falls over
theCureAlbums = get_artist_albums("The Cure")
for item in theCureAlbums:
print get_albums_tracks(item)
print ""
# 43 album band - falls over
aliceCooperAlbums = get_artist_albums("Alice Cooper")
for item in aliceCooperAlbums:
print get_albums_tracks(item)
print ""
解決方法:
results [“相冊”] [“商品”]只是一個(gè)空列表,因此索引0處沒有元素.您可以在嘗試對其進(jìn)行索引之前對其進(jìn)行測試:
if not results["albums"]["items"]:
# no albums found, so no tracks either
return []
album_id = results["albums"]["items"][0]["uri"]
標(biāo)簽:list,python-2-7,spotipy,python
總結(jié)
以上是生活随笔為你收集整理的pythonspot_python-Spotipy-列表索引超出范围的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 的微波感知_上海交大彭志科教授团队研发:
- 下一篇: alert获取输入框内容_获取由 Ale