IndexError: Вывести индекс из списка за пределы диапазона ... несмотря на то, что он находится в диапазоне - PullRequest
0 голосов
/ 04 мая 2020

заранее спасибо за вашу помощь.

У меня проблема со следующим фрагментом кода:

category = path.split("/")[3]
label = int(category.split("_")[0][1]) 
y.append(label)

Ошибка выглядит следующим образом: IndexError: list index out диапазона. Ошибка появляется в первой строке, когда я делаю разделение. Я (думаю) я понимаю, что подразумевает ошибка, но когда я делаю len (путь), я получаю 33 ... поэтому [3] не должно вызывать проблемы.

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

txt = "welcome to the jungle"
x = txt.split()[2]
print(x)

Для приведенного выше кода на выходе получается "the", как и ожидалось, это запись [2].

Теперь вернемся к моему коду, когда я run:

x = path.split()
print(x)

Я получаю следующий вывод:

['.\\00\\01_palm\\frame_00_01_0001.png']

Код, с которым у меня возникла проблема, взят из опубликованного c проекта GitHub, который я воссоздаю на своем местная машина (Юпитер). Когда я запускаю тот же проект в Google Colab, у меня нет проблем. Но когда я делаю это локально, я сталкиваюсь с этим.

Вопрос 1) Может кто-нибудь объяснить мне, почему код использует: path.split ("/") [3]? Почему "/"? Фактический путь, как видно из выходных данных, имеет только «\», означает ли «/» что-то еще? Извините, я очень новичок в python.

Вопрос 2) Что я могу сделать, чтобы исправить «IndexError: list index out of range»?

Спасибо

1 Ответ

4 голосов
/ 07 мая 2020

Из кода видно, что на Github его путь предназначен для Linux компьютера, для которого разделитель пути равен /, но вы запускаете его на windows, для которого разделитель пути равен \\ так что вы должны изменить свой код как,

category = path.split("\\")[3]
label = int(category.split("_")[0][1]) 
y.append(label)

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

import os
print(os.path.sep)

Для Linux системы, вывод будет:

/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...