Python “如何修复”;TypeError:只能将列表(而不是“str”)连接到列表;错误
我希望我的函数Python “如何修复”;TypeError:只能将列表(而不是“str”)连接到列表;错误,python,python-2.7,Python,Python 2.7,我希望我的函数getPlaylists(a、b、c)从列表a、b和c中获取值,并运行直到每个列表中的所有元素都被使用 具体地说,我想设置getPlaylists(a,b,c)以便运行getPlaylists(a[0],b[0],c[0])然后getPlaylists(a[1],b[1],c[1])等等。。。直到完成列表a、b和c中的所有值 我已尝试运行getPlaylists(a[0]、b[0]、c[0]),但它给出了错误: “TypeError:只能将列表(而不是“str”)连接到列表” 我也
getPlaylists(a、b、c)
从列表a、b和c中获取值,并运行直到每个列表中的所有元素都被使用
具体地说,我想设置getPlaylists(a,b,c)
以便运行getPlaylists(a[0],b[0],c[0])
然后getPlaylists(a[1],b[1],c[1])
等等。。。直到完成列表a、b和c中的所有值
我已尝试运行getPlaylists(a[0]、b[0]、c[0])
,但它给出了错误:
“TypeError:只能将列表(而不是“str”)连接到列表”
我也试过运行getPlaylists(a[0],b[0],c[0])
,然后在下一行中运行getPlaylists(a[1],b[1],c[1])
。只有第一个函数打印成功
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
def getPlaylists(a,b,c):
client_credentials_manager = SpotifyClientCredentials(client_id=a, client_secret=b)
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
playlists = sp.user_playlists(c)
while playlists:
for i, playlist in enumerate(playlists['items']):
print("%4d %s %s" % (i + 1 + playlists['offset'], playlist['uri'], playlist['name']))
if playlists['next']:
playlists = sp.next(playlists)
else:
playlists = None
a= ["7ce6355bc7a34c659b6ce0b6a0c53395","a15e38973eb64f9bba30258a9dde407d"]
b= ["026081a8e1a544dbbcc2bf8a373f3088","8af7eaa281dc49a58d08e46adf06e637"]
c= ["121147088","20mc3a9w582vc7a7o5cjm03d8"]
getPlaylists(a[0:],b[0:],c[0:])
我希望每个spotify帐户中的所有播放列表都能打印出来。但是,当我像上面那样格式化代码时,会出现以下错误:
在这里:
a[0::
()表示“将子列表元素从列表a
从索引0
返回到最后一个项目”-IOW,它返回的是一个列表(在本例中是整个列表),而不是单个项目。您需要的是a[0]`
话虽如此,您的数据结构是错误的。使用“平行列表”(2个或多个列表,其中项目应按位置匹配)充其量是脆弱的-对其中一个列表重新排序,整个列表将被破坏…这里的正确结构将是元组或dict列表,即:
clients = [
# (client_id, client_secret, what_is_c)
("7ce6355bc7a34c659b6ce0b6a0c53395", "026081a8e1a544dbbcc2bf8a373f3088", "121147088"),
# etc
]
它允许您简单地在其上循环:
for a, b, c in clients:
getPlaylists(a, b, c)
或者使用*args
语法:
for args in clients:
getPlaylists(*args)
另外,帮你自己一个忙:使用全名a
,b
和c
并不意味着什么,你必须查找这些变量是如何使用的,以找出它们是什么。正确的命名使代码更具可读性:
def get_playlists(client_id, client_secret, whatever_is_c_we_dont_know_but_you_proably_do):
# ...
缺少类型检查的一个缺点是,当您传递需要字符串的列表(例如client\u id
和client\u secret
参数到SpotifyClientCredentials
构造函数)时,会出现这样的错误,而不是明显的类型错误@CraigMeier就我而言,这个错误很明显xD
for a, b, c in clients:
getPlaylists(a, b, c)
for args in clients:
getPlaylists(*args)
def get_playlists(client_id, client_secret, whatever_is_c_we_dont_know_but_you_proably_do):
# ...