代码挂起,无限循环?

时间:2013-12-11 12:18:20

标签: python

我正在尝试编写一些python代码来提取数据。它几乎是正确的,但它似乎挂在制作第一个文件的末尾。在某处有无限循环吗?

train = open('mp_crf_train.txt', 'r')
lines = train.readlines()
number = 0

for i in lines:
    filename = str(number) + ".txt"
    outfile = open(filename,"w")
    lst = i.split(' ')
    x=1
    #while x < len(lst):
    for word in lst:
        if '<' in word and '/' not in word:
            sword = word[1:len(word)-1]
            close = '</'+ sword + '>'
            while lst[x] != close:
                    outfile.write(lst[x])
                    outfile.write('  ')
                    outfile.write(sword)
                    outfile.write('\n')
                    if x!=len(lst)-1:
                       x=x+1
            x=x+1
    number = number+1   

3 个答案:

答案 0 :(得分:3)

这是无限循环的材料。如果你在没有找到lst的情况下到达close的末尾,那么你就处于无限循环中,因为你正在防止增加x。如果你 得到索引错误(可能) - 你修复x对长度的修复是导致无限循环的原因。

        while lst[x] != close:
                ...
                if x!=len(lst)-1:
                   x=x+1

你应该使用的是

        while x<len(lst) and lst[x] != close:
                ...
                x=x+1

或者因为您似乎不需要x

        for item in lst:
            if item == close:
                break
            ... 

如果您需要跟踪x

        for x, item in enumerate(lst):
            if item == close:
                break
            ... 

答案 1 :(得分:2)

嗯,是的。你怎么知道这个循环

        while lst[x] != close:

会永远结束吗? close中必须list吗?那个空格怎么样(我认为这是HTML或空白无知的东西)?您假设闭括号完全符合'</'+ sword + '>'

的形式

答案 2 :(得分:1)

唯一能成为无限循环的地方就在这里:

while lst[x] != close:
如果lst[x] 从不 close

将是infinte。在每次迭代时执行print(lst[x])(或者只检查outfile中的relvant行),并将其与您的预期进行比较 - 您可能错过了一些微不足道的差异。