尝试按索引访问列表时出现Python错误 - "列表索引必须是整数,而不是str"

Tom*_*ins 29 python

我有以下Python代码:

currentPlayers = query.getPlayers()
    for player in currentPlayers:
        return str(player['name'])+" "+str(player['score'])
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

TypeError:list indices必须是整数,而不是str

我一直在寻找一个接近我的错误,但不知道怎么做,从来没有得到那个错误.所以是的,我如何将其转换为整数而不是字符串?我想问题来自于str(player['score']).

Spa*_*man 42

你期待player成为一个dict而不是一个list

>>> player=[1,2,3]
>>> player["score"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
>>> player={'score':1, 'age': 2, "foo":3}
>>> player['score']
1
Run Code Online (Sandbox Code Playgroud)


ken*_*ong 9

player['score']是你的问题.玩家显然是一个list意味着没有'得分'元素.相反,你会做类似的事情:

name, score = player[0], player[1]
return name + ' ' + str(score)
Run Code Online (Sandbox Code Playgroud)

当然,你必须知道列表索引(在我的例子中是0和1).

player['score']在python中允许类似的东西,但player必须是一个dict.

您可以在python文档中阅读有关列表和dicts的更多信息.


mgi*_*son 5

players是一个需要由整数索引的列表.你似乎像字典一样使用它.也许你可以使用拆包 - 像:

name, score = player
Run Code Online (Sandbox Code Playgroud)

(如果player列表总是一个恒定的长度).

在不知道query它是什么以及如何工作的情况下,我们可以给你更多的建议.

值得指出的是,您发布的整个代码并没有多大意义.IndentationError第二行有一个.此外,您的函数循环一些可迭代,但在第一次迭代期间无条件返回,这通常不是您实际想要做的.