2016-08-21 202 views
0

我有一个数据文件,该文件只包含以下行:列表索引范围的错误时,没有超出范围

"testA" "testB":1:"testC":2 

现在,当我分裂这一行,并打印结果列表(W)我得到以下内容:

​​

现在,当我想访问w[0],它返回"testA"就好了,但是当我打印w[1],它崩溃并给出了一个列表索引超出范围错误,但仍然打印出来"testB":1:"testC":2

任何帮助将不胜感激!

+2

无法重现错误。也许你应该提供异常的实际回溯,并且可能会导致错误的[mcve] –

+0

它不会在'w [1]'上崩溃;它在第二行的'w [0]'上崩溃! –

+0

请显示您的代码,从描述中不可能知道您在做什么。 – Barmar

回答

0

答案是程序在第一个分割后读取下一行,该行是空的。所以一旦它试图索引那个(空行)的内容,它就会崩溃。这就是为什么它打印第一行,然后坠毁。不过,非常感谢您的帮助!

0

工作对我来说没有任何错误:

>>> a = '"testA" "testB":1:"testC":2' 
>>> b = a.split(' ') 
>>> b 
['"testA"', '"testB":1:"testC":2'] 
>>> b[0] 
'"testA"' 
>>> b[1] 
'"testB":1:"testC":2' 

AE你有什么不同?

+0

我认为文件包含一些不可见的字符或其他东西。 –

+0

我不认为该文件具有不可见的字符,因为我从我的IDE中创建了它,它包含的唯一内容是我说的那一行。最后可能需要额外的括号。 – Gouatsie

+0

@Gouatsie:你能分享一下你的代码片段吗? –

1

您的代码不会崩溃的w[1]"testA" "testB":1:"testC":2线,否则会打印"testB":1:"testC":2。请注意输出中的附加[]?您的文件包含更多的空行,它们被分割为[],即使在w[0]上,也会产生该错误。

要解决该问题,您应该检查line和/或从该行创建的列表是否为非空。 (当测试线,一定要剥去任何空白,如尾部的换行符。),那么你的代码应该看起来有点像这样:

with open("test.txt") as f: 
    for line in f: 
     if line.strip(): # strip the `\n` before checking whether line is empty 
      w = line.split() 
      print(w[0], w[1]) 
0

我也无法重现你的错误,但要分享秘诀我在从文件中读取并在分隔符上分割的情况下使用。

cleaned_list = [ a.strip() for a in input_line.split(' ') if a ] 

很简单,并很好地清理分割列表。