Индекс списка вне диапазона при добавлении текста из файлов - PullRequest
0 голосов
/ 11 октября 2018

Приведенный ниже код выдает IndexError с надписью list index out of range, но когда я печатаю элемент по этому индексу, он показывает, что там есть текст.

Так почему я получаю ошибку индекса?

код:

paths = []
formats = []

with open("config.cf","r") as config_file:

    global sort_mode
    sort_mode = config_file.readline().replace("\n","").split(":")

    if sort_mode[1] == "custom":

        for line in config_file:

            temp = str(line).replace("\n","").split("/")

            if temp[0] == "mode:":
                continue

            format_list = str(temp[0]).split(",")

            paths.append(temp[1]) # <---- Error
            formats.append(format_list)

первая строка «файла конфигурации» - mode:custom, а вторая - .txt/text

Когда я делаю print(temp[1]), я получаю "текст" и "ошибку индекса" одновременно.

1 Ответ

0 голосов
/ 11 октября 2018

Ваш файл содержит \n в конце - строка после "пуста".

Этот temp = str(line).replace("\n","").split("/") возвращает список с 1 элементом.

После этого вы получаете доступ к этому списку с помощью temp[1] - это вызывает ошибку индексации.

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

Использование

if len(temp) < 2 or temp[0] == "mode:":
    continue 

Пустые списки являются ложными, и это будет продолжаться впоследствии.

Другая вещь, которую вы всегда можете сделать, если у вас возникнут исключения: поймать их.

try:

    print( [][20])
except IndexError as e:
    print(e)

Код для его проверки (используйтесначала один, потом другой create-код для config.cf):

# works
with open("config.cf","w") as f:
    f.write("""mode:custom
.txt/text""")

# fails
with open("config.cf","w") as f:
    f.write("""mode:custom
.txt/text
 """)
...