索引超出范围错误(从文件中读取的数组)

Posted

技术标签:

【中文标题】索引超出范围错误(从文件中读取的数组)【英文标题】:Index out of range error (From array that is read off of a file) 【发布时间】:2015-02-28 00:33:20 【问题描述】:

我正在尝试计算列表中存在多少特定字符串(在本例中为“v”)。 但是当我运行代码时,它给了我索引超出范围的错误。 列表由 line.split() 方法创建

这就是我所拥有的:

for line in open('cube.obj','r').readlines():
    rawdata = line.split()[0:]
    data = line.split()[1:]
    obj.add_last(data)
    if rawdata[0] == 'v':
        v_count += 1

cube.obj 文件如下:

# cube
v 0.0 0.0 0.0
v 1.0 0.0 0.0
v 1.0 0.0 1.0
v 0.0 0.0 1.0
v 0.0 1.0 1.0
v 0.0 1.0 0.0
v 1.0 1.0 0.0
v 1.0 1.0 1.0

f 1 2 3 4
f 6 7 8 5
f 2 3 8 7
f 1 4 5 6
f 3 4 5 8
f 1 2 7 6

感谢任何帮助 谢谢!

【问题讨论】:

没有看到一些输入或回溯是不可能帮助的 如果我们知道obj 是什么以及它的add_last() 方法应该做什么,那就太好了。 输入文件中的空行可能会出现此错误。 OP:您是否尝试过为此使用collections.Counter 每当我删除 obj.add_last() 时,仍然会出现同样的错误。所以我认为是 if 语句造成了麻烦 【参考方案1】:

如果您收到 Index out of range 错误,那是因为您正在引用一个不存在的列表条目。

在你的情况下,这看起来很可能是rawdata[0] == 'v'

如果 rawdata 是一个空列表,这将导致错误。如果您的行是空字符串,就会发生这种情况。

line = ''
rawdata=line.split()[0:]
rawdata
> []
rawdata[0]
> ---------------------------------------------------------------------------
> IndexError                                Traceback (most recent call last)
> <ipython-input-4-c81248904650> in <module>()
> ----> 1 rawdata[0]
> IndexError: list index out of range

要跳过此,请测试该行是否为空,如果是,请continue 到下一行。

for line in ['', '', 'a', 'b']:
   if not line:
       continue
   rawdata = line.split()[0:]
   print rawdata[0]

> a
> b

【讨论】:

谢谢。文件中有一个空行。有什么办法可以让我忽略一个空列表并计算'v'? 已编辑以显示如何continue(即,跳过其余语句并转到循环中的下一步) 好的,谢谢,我明白了。但是 continue 方法对我的情况有效吗?我已经编辑了我的帖子,所以我可以告诉你我想要做什么。 查看continue 的工作原理***.com/questions/8420705/… 它适用于您的情况。【参考方案2】:

您可以使用生成器表达式 sum 使用 if line.strip() 捕获空行,因为我们不会得到 IndexError 索引空列表:

def  counts(f,ch):
    with open(f) as in_file:
        return sum(line.split()[0] == ch for line in in_file if line.strip())
print(counts("words.txt","v"))
8

if line.strip() 只会在该行不为空时为 True。

【讨论】:

以上是关于索引超出范围错误(从文件中读取的数组)的主要内容,如果未能解决你的问题,请参考以下文章

为啥在使用 readlines() 读取文件时出现列表索引超出范围错误?

读取csv python时列出索引超出范围

Swift 致命错误:数组索引超出范围

尝试读取解析的 JSON 数组时索引超出范围

SwiftUI - 致命错误:从数组中删除元素时索引超出范围

线程 1:致命错误:索引超出范围