Почему в python IndexError: list index out of range?

shell_guy

Новичок
Пользователь
Сен 1, 2021
5
0
1
Доброго времени суток!

1) OS: Windows Server 2019
2) Python: 3.10
3)pip list

Package Version
------------------ ---------
certifi 2021.10.8
charset-normalizer 2.0.7
idna 3.3
influxdb 5.3.1
msgpack 1.0.2
pip 21.2.3
python-dateutil 2.8.2
pytz 2021.3
requests 2.26.0
setuptools 57.4.0
six 1.16.0
urllib3 1.26.7

4) Исходный код - прикрепил во вложениях (весь код не вместился в теме)


Скрипт работал несколько месяцев без проблем и вдруг сломался:

Код:
>analyze_influx.py
Traceback (most recent call last):
  File "C:\Users\usr\Downloads\win_radius_analyzer\analyze_influx.py", line 240, in <module>
    follow(forcedate = False)
  File "C:\Users\usr\Downloads\win_radius_analyzer\analyze_influx.py", line 127, in follow
    client_mac = a[8].replace("'-', ':'").replace('"', '').strip()
IndexError: list index out of range

Суть ошибки насколько я понял следующий:
Есть список(лог) и та часть кода которая проходиться по этому списку выходит за рамки этого списка, то есть скрипт пытается обраться к той части списка которой нету

Подскажите пожалуйста что нужно поправить в коде чтобы устранить ошибку?
В какую позицию строки можно добавить обработчик ошибок?

try:
except Exception as error:
print(error)

Благодарю!
 

Вложения

  • analyze_influx.zip
    2,2 КБ · Просмотры: 1
Последнее редактирование:

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
Исходный код - прикрепил во вложениях
где?
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
ну в строку 127...
там у вас список а, и в каком то моменте в нем нет элемента с индексом 8, на этом нужно прерывать цикл for или начинать заново, так как потом вы обращаетесь к элементам дальше, которых точно уже не будет...
еще у вас в коде есть не определенные except, это не очень хорошо, так как таким образом вы перехватываете все ошибки...
 

shell_guy

Новичок
Пользователь
Сен 1, 2021
5
0
1
ну в строку 127...
там у вас список а, и в каком то моменте в нем нет элемента с индексом 8, на этом нужно прерывать цикл for или начинать заново, так как потом вы обращаетесь к элементам дальше, которых точно уже не будет...
еще у вас в коде есть не определенные except, это не очень хорошо, так как таким образом вы перехватываете все ошибки...
Вы имеете ввиду вот так добавить код?

Python:
if ONLYNEWDATA and timestamp < lasttime:
                continue
            saveLastTime(timestamp)
            try:
                stype = int(a[4].replace('"', ""))
            except:
                stype = a[4].replace('"', "")
            add_log(f"Stype: {stype}")
            client = a[5].replace('"', "")
            origin = a[6].replace('"', "")
            try:
              except client_mac = a[8].replace('-', ':').replace('"', '').strip()
              print(error)
            if client_mac and not client_mac.count(":"):
                tmp_client_mac = client_mac
                client_mac = ""
                u = 0
                for i in tmp_client_mac:
                    client_mac += i
                    u += 1
                    if u == 2:
                        u = 0
                        client_mac += ":"
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
Python:
...

try:
    client_mac = a[8].replace('-', ':').replace('"', '').strip()
except IndexError:
    continue
    
...
 

shell_guy

Новичок
Пользователь
Сен 1, 2021
5
0
1
Python:
...

try:
    client_mac = a[8].replace('-', ':').replace('"', '').strip()
except IndexError:
    continue
   
...
Интегрировал вот так, но ошибка старая осталась...

Python:
origin = a[6].replace('"', "")
            try:
               client_mac = a[8].replace('-', ':').replace('"', '').strip()
            except IndexError:
                continue
            if client_mac and not client_mac.count(":"):
                tmp_client_mac = client_mac
                client_mac = ""
                u = 0
                for i in tmp_client_mac:
                    client_mac += i
                    u += 1
                    if u == 2:
                        u = 0
                        client_mac += ":"
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
точно такая же? в той же строке? не может быть...

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

shell_guy

Новичок
Пользователь
Сен 1, 2021
5
0
1
точно такая же? в той же строке? не может быть...

PS
ваш код не воспроизводим, я не могу его запустить у себя, было бы неплохо скинуть минимально рабочий пример, который демонстрирует вашу проблему...
ну там не так просто потому что нужна БД и Radius сервер на Win
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
ну там не так просто потому что нужна БД и Radius сервер на Win
ясно...

вы не ответили про ошибку...
 
Последнее редактирование:

Форум IT Специалистов