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):
    # ...