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

时间:2013-01-07 15:24:47

标签: python

我有以下Python代码:

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

我收到以下错误:

  

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

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

4 个答案:

答案 0 :(得分:38)

您希望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

答案 1 :(得分:7)

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

name, score = player[0], player[1]
return name + ' ' + str(score)

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

python中允许使用player['score']之类的内容,但player必须是dict

您可以在python documentation中了解有关列表和词组的更多信息。

答案 2 :(得分:5)

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

name, score = player

(如果player列表始终为常量长度)。

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

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

答案 3 :(得分:1)

列表是一系列空格,可以用(0,1,2 ......等)索引。因此,如果玩家是一个列表,玩家[0]或玩家[1]将会有效。如果玩家是字典,玩家[“名字”]就可以了。