【问题标题】:Does "IndexError: list index out of range" when trying to access the N'th item mean that my list has less than N items?IndexError:列表索引超出范围和python
【发布时间】:2010-11-09 01:51:27
【问题描述】:

我告诉我的程序打印输出的第 53 行。这个错误是否告诉我没有那么多行,因此无法打印出来?

【问题讨论】:

  • 索引错误实际上并没有向您显示导致错误的索引,这让我有点恼火。我必须不断添加打印语句来检测错误。愚蠢的。

标签: python list indexoutofboundsexception


【解决方案1】:

如果您有一个包含 53 个项目的列表,则最后一个是 thelist[52],因为索引从 0 开始。


来自Real Python: Understanding the Python Traceback - IndexError

IndexError

IndexError 在您尝试从序列中检索索引时引发,例如 listtuple,但在序列中找不到该索引。 Python 文档定义了何时引发此异常:

当序列下标超出范围时引发。 (Source)

这是一个引发IndexError的示例:

test = list(range(53))
test[53]

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-6-7879607f7f36> in <module>
      1 test = list(range(53))
----> 2 test[53]

IndexError: list index out of range

IndexError 的错误消息行没有为您提供重要信息。您可以看到您有一个序列引用 out of range 以及序列的类型,在本例中为 list。这些信息与其余的回溯相结合,通常足以帮助您快速确定如何解决问题。

【讨论】:

    【解决方案2】:

    是的,

    您正在尝试访问列表中不存在的元素。

    MyList = ["item1", "item2"]
    print MyList[0] # Will work
    print MyList[1] # Will Work
    print MyList[2] # Will crash.
    

    您是否遇到过一个错误?

    【讨论】:

      【解决方案3】:

      Python 索引的工作方式是它从 0 开始,因此列表的第一个数字将是 [0]。您必须打印 [52],因为起始索引为 0 并且 因此第 53 行是[52]

      从值中减去 1 就可以了。 :)

      【讨论】:

        【解决方案4】:

        是的。该序列没有第 54 项。

        【讨论】:

          【解决方案5】:

          没错。 “列表索引超出范围”很可能意味着您指的是列表的 n-th 元素,而列表的长度小于 n

          【讨论】:

            【解决方案6】:

            当您想克服此错误时,请始终牢记,索引和范围的默认值从 0 开始,因此如果项目总数为 100,则 l[99] 和 range(99) 将允许您访问最后一个元素。

            每当您遇到此类错误时,请交叉检查介于/中间范围内的项目,并确保如果您获得输出,它们的索引不是最后一个,那么您已经犯了上述完美错误。

            【讨论】:

              【解决方案7】:

              如果您从文本文件中读取列表,您可能会得到最后一个空行作为列表元素。 你可以像这样摆脱它:

              list.pop()
              for i in list:
                 i[12]=....
              

              【讨论】:

                【解决方案8】:

                在 Python 中,索引从 0 开始。因此,如果您有一个包含 53 个项目的列表,list[52] 将是列表中的最后一个项目。

                【讨论】:

                  猜你喜欢
                  • 2016-08-25
                  • 2017-04-05
                  • 2012-07-15
                  • 2013-06-04
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多