gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 16:21:50 28 4
gpt4 key购买 nike

编写 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["albums"]["items"] 只是一个空列表,因此索引 0 处没有元素。您可以在尝试对其进行索引之前对其进行测试:

if not results["albums"]["items"]:
# no albums found, so no tracks either
return []

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

关于python - Spotipy - 列表索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39688358/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com