35

我有以下 Python 代码:

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

我收到以下错误:

TypeError:列表索引必须是整数,而不是 str

我一直在寻找接近我的错误,但不知道该怎么做,从来没有得到那个错误。所以是的,我怎样才能将它转换为整数而不是字符串?我猜问题出在str(player['score']).

4

4 回答 4

45

您是否期望player成为 adict而不是 a 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
于 2013-01-07T15:28:07.407 回答
9

player['score']是你的问题。player 显然是 alist这意味着没有“分数”元素。相反,您会执行以下操作:

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

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

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

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

于 2013-01-07T15:32:37.643 回答
5

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

name, score = player

(如果player列表始终是恒定长度)。

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

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

于 2013-01-07T15:27:10.313 回答
1

列表是可以按 (0, 1, 2 .... 等) 索引的空间链。因此,如果球员是一个列表,球员[0] 或球员[1] 会起作用。如果 player 是字典,则 player["name"] 会起作用。

于 2013-01-07T20:57:13.010 回答