2013-03-13 9 views
-2

В приведенном ниже коде я хочу напечатать строки, которые находятся между «первым», и в той строке, которая ищет строку «new.txt». Когда я запускаюсь, я получаю сообщение об ошибке:Получение ошибки при выполнении кода

if "first" in lines[i+n]: 
IndexError: list index out of range 

мой код:

def find_path(self): 
     f = open("/output",'w') 
     for line in self.logs: 
      f.write(line) 
     f = open('/output','rb') 
     lines = f.readlines() 
     for i,line in enumerate(lines):  
      if "first" in line: 
       pattern = line 
       for n in range(1,len(lines)): 
        if "first" in lines[i+n]: 
         break 
        else: 
         if "new.txt" in line: 
          print line 
         print lines[i+n] 
     f.close()    

ответ

0

Это потому, что i+n может быть и будет больше, чем длина lines списка.

for i,line in enumerate(lines):  

Это перечисление создает ценности для i от 0 до len(lines) - 1, поэтому максимальное значение i является len(lines) - 1.

Следующие строки говорят нам, что значения n может быть от 1 до len(lines) - 1, поэтому максимальное значение n является len(lines) - 1 снова:

for n in range(1,len(lines)): 
    if "first" in lines[i+n]: 
     break 

Таким образом, значение i + n может быть от 1 до 2 * (len(lines) - 1) - вот почему вы получаете IndexError.

+0

Как его решить? .. Я попытался использовать len (lines) -1, но все еще получаю ошибку –

+1

Я не понимаю идею вашего кода, если вы это объясните, может быть, я найду способ чтобы помочь вам решить проблему. – aga

Смежные вопросы