Я получил: IndexError: список индекса вне диапазона, но я не знаю почему, и это не влияет на вывод - PullRequest
0 голосов
/ 09 февраля 2019

Я создавал программу, чтобы получить среднее значение отличий чисел от внешнего файла .txt.Я написал это, и вдруг я получаю ошибку индекса.Я думаю, что знаю значение этого, индекс не существует.Я не знаю, где ошибка ...

Кроме того, ошибка получается странной и прерывается другими выводами (распечатками), и я понятия не имею, почему это происходит ...

Список здесь:

111
222
333
444
555
666
777
888
999

код:

file = open("list", "r")
lst = file.read().split("\n")

index = 0

for i in lst:
    num1 = lst[index]

    index += 1

    num2 = lst[index]

    print("NUM1:" + str(num1))
    print("NUM2:" + str(num2))

    dif = int(num2) - int(num1)

    print(dif)

Вывод не выглядит, как будто есть какие-либо последствия ошибки ...

Traceback (most recent call last):  
NUM1:111  
  File "FILE_LOCATION", line 11, in <module>  
NUM2:222  
    num2 = lst[index]  
111  
IndexError: list index out of range  
NUM1:222  
NUM2:333  
111  
NUM1:333  
NUM2:444  
111  
NUM1:444  
NUM2:555  
111  
NUM1:555  
NUM2:666  
111  
NUM1:666  
NUM2:777  
111  
NUM1:777  
NUM2:888  
111  
NUM1:888  
NUM2:999  
111  

Process finished with exit code 1  

Еще одна вещь: ошибка непредсказуема и всегда появляется в разных местах.Иногда полностью в начале, иногда в конце, а иногда и во всем выводе.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019
list1 = []
for line in x.readlines():
    line = line.replace("\n","")
    list1.append(line)
for i in range(len(list1)):
    if i+1<len(list1):
        s1 = int(list1[i])
        s2 = int(list1[i+1])
        print(f"Num1->{s1}")
        print(f"Num2->{s2}")
        dif = s2-s1
        print(dif)
    else:
        print("List is completed")

Ошибка вызвана ошибкой индекса, так как вы увеличили индекс до +1 в приведенном выше примере кода, и этот индекс отсутствует в списке типа-> lst.Вот почему вы получили эту ошибку.Попробуйте этот код будет работать для вас

0 голосов
/ 09 февраля 2019

Для каждого элемента вы проверяете разницу между текущим и следующим элементом.Тем не менее, последний элемент не имеет следующий элемент, следовательно, ошибка.

Причина, по которой вы видите ошибку перед выводом, вероятно, связана с тем, что выход переходит к стандартный вывод и ошибка переходит к стандартной ошибке , которые представляют собой два разных потока, и они сбрасываются одновременно при сбое приложения.

Вывод, похоже, не подвержен влияниювам следует остановиться на последнем элементе, но вы не остановитесь, поэтому программа вылетает после того, как все напечатано.

...