Najczęstsze błędy w Pythonie u początkujących: co oznaczają komunikaty i jak je poprawić
SyntaxError, IndentationError, NameError, ValueError, TypeError i IndexError na prostych przykładach. Dowiedz się, jak czytać komunikat błędu i szybko znaleźć przyczynę.
Jak czytać komunikat błędu (traceback)
Gdy program się wysypuje, Python wypisuje tzw. traceback. Na początku wygląda groźnie, ale ma prostą budowę: wyżej jest ścieżka wywołań, a na samym dole nazwa błędu i krótki opis. Zawsze zaczynaj czytanie od ostatniej linii.
Druga ważna informacja to numer linii (line 3, line 7 itd.). To miejsce, w którym Python zauważył problem. Przyczyna bywa linię wcześniej — na przykład niezamknięty nawias w linii 2 daje błąd zgłoszony w linii 3.
Jeśli uruchamiasz kod w interpreterze Pythona w przeglądarce, pod wynikiem dla kilku najczęstszych błędów pojawi się dodatkowo krótka wskazówka po polsku. Poniżej znajdziesz te same błędy rozpisane dokładniej.
Błędy, które zobaczysz najczęściej
SyntaxError — Python nie rozumie zapisu
To błąd składni: kod nie jest poprawnym Pythonem, więc program w ogóle się nie uruchamia. Najczęstsze przyczyny to brak dwukropka po if, for, while lub def, niezamknięty nawias albo cudzysłów oraz użycie = zamiast == w warunku.
IndentationError — niespójne wcięcia
W Pythonie wcięcia wyznaczają bloki kodu. Linie wewnątrz tego samego if albo pętli muszą mieć identyczne wcięcie, a po linii zakończonej dwukropkiem musi pojawić się wcięty blok. Mieszanie spacji i tabulatorów kończy się błędem TabError.
NameError — nazwa nie została zdefiniowana
Python nie zna nazwy, której użyłeś. Zwykle to literówka (wynk zamiast wynik), różnica w wielkości liter (Print zamiast print) albo użycie zmiennej, zanim przypisano jej wartość. Zdarza się też, gdy tekst nie jest ujęty w cudzysłów.
ValueError — zła wartość, np. przy int(input())
Klasyka pierwszych programów: int(input()) dostaje tekst, którego nie da się zamienić na liczbę całkowitą, na przykład '2,5', 'dwa' albo pusty napis. Komunikat zaczyna się wtedy od invalid literal for int().
Rozwiązania są dwa: wpisuj liczbę w poprawnym formacie albo zabezpiecz program, sprawdzając dane przed konwersją.
TypeError — operacja na niepasujących typach
Najczęściej pojawia się przy łączeniu tekstu z liczbą. input() zawsze zwraca tekst, więc '5' + 3 nie zadziała. Trzeba zdecydować, czy chcesz liczyć (zamień tekst na liczbę), czy sklejać napisy (zamień liczbę na tekst albo użyj f-stringa).
IndexError — indeks poza listą
Lista o długości 3 ma indeksy 0, 1 i 2. Odwołanie do elementu [3] kończy się błędem list index out of range. Często winna jest pętla z range(len(lista) + 1) albo założenie, że numeracja zaczyna się od 1.
Nawyki, które skracają szukanie błędów
Nie musisz zapamiętywać wszystkich typów wyjątków. Ważniejsze jest kilka prostych nawyków, które sprawiają, że błąd znajdziesz w minutę, a nie w pół godziny.
- Uruchamiaj program często — po każdych kilku liniach, a nie dopiero po napisaniu całości.
- Dodawaj tymczasowe print(), żeby zobaczyć, jakie wartości mają zmienne w danym momencie.
- Czytaj komunikat od dołu i zaczynaj od wskazanej linii oraz tej przed nią.
- Gdy nie rozumiesz komunikatu, skopiuj jego ostatnią linię i poszukaj jej dosłownie — ktoś na pewno miał ten sam problem.
- Upraszczaj: zakomentuj część kodu i sprawdź, przy którym fragmencie błąd znika.
Gdzie to przećwiczyć
Najlepiej uczyć się na własnych błędach. Weź przykłady z tego artykułu, celowo je zepsuj i zobacz, jaki komunikat wypisze Python. Możesz to zrobić od razu w edytorze Pythona online, bez instalowania czegokolwiek.
Kiedy podstawy będą już pewne, sięgnij po zadania z automatycznym sprawdzaniem. Testy pokażą nie tylko błędy w składni, ale też sytuacje, w których program działa, a mimo to daje zły wynik — to kolejny ważny etap nauki debugowania.
Krótkie podsumowanie
Komunikat błędu to podpowiedź, a nie wyrok. Czytaj go od dołu: ostatnia linia mówi, co się stało, a numer linii pokazuje, gdzie szukać. Większość błędów na początku to literówki, brakujące dwukropki, niespójne wcięcia i pomylone typy danych — po kilku tygodniach rozpoznasz je w kilka sekund.
Zacznij za darmo