Ошибка в коде list index out of range
В чем может быть проблема? Нужно выводить последние строки с файла (Снизу в верх) Буду благодарен за решение данной проблемы, я просто чайник и пишу для теста это)
Код:
def famloglast(peer_id, user_id, family, strok):
if family in familyall:
if family == 'test1':
if user_id in DostupID:
textlog = Test1_FileLog.read()
logstroki = textlog.split('\n')
logstroki.reverse()
strok = int(strok)
i = 1
logoutput = []
for i in range(strok):
logoutput.append(logstroki[i]) #Это 122 строка
i=i-1
if i == 1:
logoutput.reverse()
output = '\n'.join(logoutput)
send_message(peer_id, output)
famloglast(1234, 1234, test1, 10)
Ошибка:
line 122, in famloglast
logoutput.append(logstroki[i])
IndexError: list index out of range
Ответы (2 шт):
В вашем
logstrokiколичество символов оказывается меньше, чем требует переменнаяstrok. В результате вы выходите за границу и вам выдается ошибка (так как кода исполняемого вы не привели, то точно мне не проверить, но должно это быть причиной).Обратите также внимание, что
i=1пропадает зря, так какfor i in range(strok):устанавливает i в 0. Иi=i-1тоже не к месту, там уже итератор управляет этим i. Это в любом случае нужно исправлять. Решите, что вы хотите, так как итератор делает +1 на каждом шаге, а вы пытаетесь делать -1. Срабатывает это только на самом последнем шаге. Фактически после цикла ваш i всегда будет равенstrok - 2. Так чтоi == 1сработает только при strok = 3.
по поводу ошибки вам уже подсказали, а на счет получения последних строк, вы можете заменить свой цикл на это, и реверс делать не надо:
output = '\n'.join(logstroki[-strok:])