#python #list
#python #Список
Вопрос:
Следующий код показывает, что ошибка индекса: индекс списка находится вне диапазона
Здесь я пытаюсь найти строку, которая начинается с «From», а затем напечатать слово рядом с ней, используя .split()
if len(fname) < 1 : fname = "mbox-short.txt"
fh = open(fname)
count = 0
for a in fh:
a=a.rstrip()
b=a.split()
if b[0]=="From":
count=count 1
print(b[1])
print("There were", count, "lines in the file with From as the first word")
для следующей строки
if b[0]=="From":
Где я ошибаюсь?
Комментарии:
1. «Где я ошибаюсь?» Ну, в нем говорится, что есть
IndexError
, которыйError
имеет отношение кIndex
используемому вами. В нем конкретно указано, чтоindex
вы используете дляlist
isout of range
. Вашlist
естьb
, а вашindex
есть0
. Что должно быть истинным дляb
, чтобы этот индекс был вне диапазона? Теперь рассмотрим, какb
создается. Что должно быть истинным, чтобы список получился таким?
Ответ №1:
Проверьте длину перед доступом к индексу массива.
if len(b) > 0 and b[0] == 'From':
Также убедитесь, что вы закрыли открытый файл.
fh.close()
Ответ №2:
ну, проблема в том, что если a пусто, a.strip
ничего не вернет, поэтому вам нужно проверить if a != ""
, и у вас все должно быть хорошо