pythonspot_python-Spotipy-列表索引超出范围

编写Spotipy脚本以从给定专辑返回专辑曲目,我偶尔会遇到错误:

album_id = results["albums"]["items"][0]["uri"]

IndexError: list index out of range

这种错误往往发生在更多的流行歌手遍历所有专辑的时候.我猜结果列表已达到极限或以某种方式乱序.无论哪种方式,我都不确定如何解决它,因为我很确定我从Spotipy网站上获得了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 [“相册”] [“商品”]只是一个空列表,因此索引0处没有元素.您可以在尝试对其进行索引之前对其进行测试:

if not results["albums"]["items"]:

# no albums found, so no tracks either

return []

album_id = results["albums"]["items"][0]["uri"]

标签:list,python-2-7,spotipy,python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值