【发布时间】:2010-11-09 01:51:27
【问题描述】:
我告诉我的程序打印输出的第 53 行。这个错误是否告诉我没有那么多行,因此无法打印出来?
【问题讨论】:
-
索引错误实际上并没有向您显示导致错误的索引,这让我有点恼火。我必须不断添加打印语句来检测错误。愚蠢的。
标签: python list indexoutofboundsexception
我告诉我的程序打印输出的第 53 行。这个错误是否告诉我没有那么多行,因此无法打印出来?
【问题讨论】:
标签: python list indexoutofboundsexception
如果您有一个包含 53 个项目的列表,则最后一个是 thelist[52],因为索引从 0 开始。
来自Real Python: Understanding the Python Traceback - IndexError:
IndexError
IndexError在您尝试从序列中检索索引时引发,例如list或tuple,但在序列中找不到该索引。 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。这些信息与其余的回溯相结合,通常足以帮助您快速确定如何解决问题。
【讨论】:
是的,
您正在尝试访问列表中不存在的元素。
MyList = ["item1", "item2"]
print MyList[0] # Will work
print MyList[1] # Will Work
print MyList[2] # Will crash.
您是否遇到过一个错误?
【讨论】:
Python 索引的工作方式是它从 0 开始,因此列表的第一个数字将是 [0]。您必须打印 [52],因为起始索引为 0 并且
因此第 53 行是[52]。
从值中减去 1 就可以了。 :)
【讨论】:
是的。该序列没有第 54 项。
【讨论】:
没错。 “列表索引超出范围”很可能意味着您指的是列表的 n-th 元素,而列表的长度小于 n。
【讨论】:
当您想克服此错误时,请始终牢记,索引和范围的默认值从 0 开始,因此如果项目总数为 100,则 l[99] 和 range(99) 将允许您访问最后一个元素。
每当您遇到此类错误时,请交叉检查介于/中间范围内的项目,并确保如果您获得输出,它们的索引不是最后一个,那么您已经犯了上述完美错误。
【讨论】:
如果您从文本文件中读取列表,您可能会得到最后一个空行作为列表元素。 你可以像这样摆脱它:
list.pop()
for i in list:
i[12]=....
【讨论】:
在 Python 中,索引从 0 开始。因此,如果您有一个包含 53 个项目的列表,list[52] 将是列表中的最后一个项目。
【讨论】: