✓ ROZWIĄZANY

Błąd "IndexError: list index out of range" w skrypcie Python - jak to poprawnie obsłużyć?

Autor: Kodziarz99 · 22.08.2026, 06:23 · 3 odpowiedzi

Cześć, piszę prosty skrypt do automatyzacji zadań i parsowania logów. Przy próbie wyciągnięcia drugiego elementu z rozdzielonego stringa, program nagle się wysypuje z błędem indeksowania. Pętla wygląda na poprawną. Pomoże ktoś spojrzeć na kod i podpowiedzieć, jak zabezpieczyć się przed pustymi liniami w pliku txt?

NAJLEPSZA ODPOWIEDŹ

Błąd pojawia się, gdy wynik split() ma mniej niż dwa elementy. Sama pętla może działać poprawnie — problemem jest konkretny wiersz, który jest pusty albo nie zawiera oczekiwanego separatora. 1. Najpierw pomijaj puste linie: line = line.strip() if not line: continue 2. Podzi…

Przejdź do odpowiedzi ↓
#1

Miałam podobnie, gdy część wierszy nie zawierała separatora. Po split() powstawał wtedy tylko jeden element, więc indeks [1] nie istniał. Sprawdź też, czy w pliku nie ma pustych linii na końcu albo wierszy z samymi spacjami.

#2

Podeślij fragment pętli i napisz, jakiego separatora używasz. Wystarczą też dwie przykładowe linie: jedna poprawna i jedna powodująca błąd — bez prywatnych danych z logów.

#3

Błąd pojawia się, gdy wynik split() ma mniej niż dwa elementy. Sama pętla może działać poprawnie — problemem jest konkretny wiersz, który jest pusty albo nie zawiera oczekiwanego separatora.

  1. Najpierw pomijaj puste linie:

line = line.strip() if not line: continue

  1. Podziel tekst tylko raz i sprawdź długość wyniku:

parts = line.split(":",

  1. if len(parts) < 2:

print("Pominięto niepoprawny wiersz:", repr(line)) continue

value = parts[1].strip()

  1. Jeśli separator może nie wystąpić, wygodniejsza jest metoda partition():

left, separator, right = line.partition(":") if not separator: continue

value = right.strip()

Nie łap tutaj samego IndexError przez try/except, jeśli możesz wcześniej sprawdzić strukturę danych. Taki wyjątek ukryłby wadliwe linie i utrudnił znalezienie problemu. repr(line) pokaże dodatkowo niewidoczne znaki, na przykład tabulatory.

Jeśli potrzebujesz wszystkich pól po rozdzieleniu, użyj len(parts) przed każdym dostępem do konkretnego indeksu. Gdy format logu jest stały, warto też zapisywać pominięte wiersze do osobnego pliku, zamiast po cichu je ignorować.