Python while循环没有正确退出,在最后一次迭代中看到“超出范围”错误

时间:2014-06-25 20:54:07

标签: python

我会诚实地承认我曾问过一个早先的相关问题,但我已经找到了解决早期问题的方法,现在又遇到了另一个问题!我正在遍历列表来搜索大文本文件。搜索涉及获取第一个列表条目并使用该字符串(数字),它通过搜索该条目的文本文件。该脚本可以正常运行到最后一次迭代/最后一个列表条目,从而在cmd窗口中出现以下错误...

2014 Apr 25  09:46:58.884  [35]  0x5245  FFFF Rec rst 4444 A

18.84
2014 Apr 25  09:46:58.902  [81]  0x5245  FFFF Rec rst 4444 A

19.62
2014 Apr 25  09:46:58.944  [2B]  0x5245  FFFF Rec rst 4444 A

16.69
Traceback (most recent call last):
File "C:\MEAN_val.py", line 361, in <module>
duta()
File "C:\MEAN_val.py", line 120, in duta
for word in [framelist[num]]:
IndexError: list index out of range
Exception RuntimeError: RuntimeError('sys.meta_path must be a list of import hoo
ks',) in <bound method Workbook.__del__ of <xlsxwriter.workbook.Workbook object
at 0x0241F2F0>> ignored

似乎while num&lt; = len(framelist):函数不起作用,一旦num达到列表的长度,它就不会退出循环。

这是我的部分工作代码......

for root, subFolders, files in chain.from_iterable(os.walk(path) for path in paths):
        for filename in files:  
            if filename.endswith('.txt'): 

                with open(os.path.join(root, filename), 'r') as fBMA:

                    searchlinesBMA = fBMA.readlines()
                    fBMA.close()



                    num = 0


                    while num<=len(framelist):
                        for i, line in enumerate(searchlinesBMA):
                            for word in [framelist[num]]:
                                if word in line:
                                    keylineBMA = searchlinesBMA[i-2]
                                    Rline = searchlinesBMA[i+10]
                                    Rline = re.sub('[()]', '', Rline)
                                    valueR = Rline.split()
                                    split = keylineBMA.split()
                                    if split[10] == 'A':
                                        print keylineBMA
                                        print valueR[3]
                                        num+=1

                                    break

感谢阅读, MikG

2 个答案:

答案 0 :(得分:2)

您可以将代码更改为:

while num<len(framelist)

因为长度只是一个计数。如果你从零开始并转到(包括)长度,你将经历循环(长度+ 1)次

答案 1 :(得分:0)

决定使用以下代码干净地退出循环。无论如何,书面Excel匹配,所以仍然有点不确定为什么索引错误存在?

except IndexError:
    pass
continue