欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2024/7/23 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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

总结

以上是生活随笔为你收集整理的pythonspot_python-Spotipy-列表索引超出范围的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。