@Anastas_os
Пытаюсь программировать)

Код выводит правильные ответы, но очень раздражает ошибка(IndexError: list index out of range), кто знает как исправить?

У нас есть файл з сотрудниками в котором инфа о них а вот сам код:
def workers():
    infile = open("C:/Users/OWNER/Desktop/2/workers.txt","r")
    arr = []
    arr1 = []
    
    arr = infile.readlines()
    
    for i in arr:
        arr1.append(i.split(","))
    
    #------------task 1--------
    for i in arr1:
        if(35>(2017-int(i[4]))):
            print(i[1], "-", 2017-int(i[4]),"годика")
workers()


После запуска программы результат выводит правильный, но также выводит и ошибку:

Юрий С.О. - 22 годика
Мария Ф. Н.- 19 годика - это правильный ответ о котором я говорила выше

Traceback (most recent call last):
  File "C:\Users\OWNER\Desktop\2\Lab.py", line 20, in <module>
    workers()
  File "C:\Users\OWNER\Desktop\2\Lab.py", line 13, in workers
    if(35>(2017-int(i[4]))):
IndexError: list index out of range


Как можно заметить оно и так работает но очень бы хотелось убрать это ошибку также когда игралась с кодом заметила что если вставить return ошибка уходит но выводит уже только одну персону возраст которой подходит под условие
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ответы на вопрос 2
@o5a
Проблема возникает из-за самого файла с данными. В какой-то из строк не более трех запятых, поэтому она не может быть разложена через split на 5 элементов. Возможно там вообще пустая строка (возможно даже в самом конце файла). Если файл небольшой, это и визуально будет заметно.

Можно вывести эти неправильные данные при ошибке через обработку исключений например:
for i in arr1:
    try:
        if(35>(2017-int(i[4]))):
            print(i[1], "-", 2017-int(i[4]),"годика")
    except IndexError:
        print("Кривая строка", i)
Ответ написан
DollyPapper
@DollyPapper
Как можно заметить оно и так работает

Нет. Не работает. Вы выходите за границу массива. Если я правильно себе представляю структуру вашего файла, то
if(35>(2017-int(i[4]))):
Нужно записать как:
if(35>(2017-int(i[3]))):
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы