49

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

4

8 回答 8

78

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


来自Real Python:了解 Python Traceback -IndexError

IndexError

IndexError您尝试从序列中检索索引(如 alist或 a tuple)并且在序列中未找到该索引时会引发 。Python 文档定义了何时引发此异常:

当序列下标超出范围时引发。(来源

这是一个引发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

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

于 2009-07-08T15:07:15.337 回答
35

是的,

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

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

你有过一个错误吗?

于 2009-07-08T15:08:32.620 回答
7

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

从值中减去 1,你应该没问题。:)

于 2017-05-03T08:58:46.413 回答
5

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

于 2009-07-08T15:07:00.940 回答
3

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

于 2009-07-08T15:08:10.423 回答
2

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

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

于 2016-06-13T08:34:53.770 回答
1

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

list.pop()
for i in list:
   i[12]=....
于 2019-04-26T12:55:08.523 回答
0

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

于 2020-06-23T09:48:26.610 回答