【问题标题】:Python error when trying to access list by index - "List indices must be integers, not str"尝试按索引访问列表时出现 Python 错误 - “列表索引必须是整数,而不是 str”
【发布时间】:2013-01-07 15:24:46
【问题描述】:

我有以下 Python 代码:

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

我收到以下错误:

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

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

【问题讨论】:

    标签: python


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        name, score = player
        

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

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2015-05-03
            • 1970-01-01
            • 1970-01-01
            • 2017-01-27
            • 2016-02-09
            • 2018-08-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多