CodeGym /Kursy /Python SELF PL /Błędy podczas pracy programu

Błędy podczas pracy programu

Python SELF PL
Poziom 17 , Lekcja 0
Dostępny

1.1 Występowanie błędów

Błędy (i wyjątki) są nieodłączną częścią programowania. Występują, gdy program napotyka na nieoczekiwane sytuacje, które nie może obsłużyć. W Pythonie istnieje system obsługi wyjątków, który pozwala przechwytywać i obsługiwać błędy, zapobiegając zakończeniu działania programu.

Wyjątki najczęściej występują w następujących sytuacjach:

Błędy składniowe:

Te błędy są wykrywane podczas kompilacji kodu i są związane z niewłaściwą składnią języka Python. Na przykład, brakujące dwukropki lub błędne słowa kluczowe.


if True:
    print("Hello")
        

Błędy czasu wykonania (Runtime Errors):

Te błędy występują podczas wykonywania programu i mogą być spowodowane różnymi przyczynami, takimi jak dzielenie przez zero, dostęp do nieistniejącego indeksu listy, niewłaściwe użycie typów danych itd.


print(1 / 0)  # ZeroDivisionError
        

Błędy logiczne:

Te błędy występują, gdy program działa bez awarii, ale zwraca nieprawidłowy wynik z powodu błędu w logice programu. Błędy logiczne nie powodują wyjątków i są trudniejsze do debugowania.

Błędy logiczne zwykle nazywane są bugami — to jakby pewne niedociągnięcia w funkcjonalności programu. Błędy czasu wykonania nazywane są wyjątkami. Dla każdego takiego błędu Python tworzy specjalny obiekt (wyjątek) i "rzuca" go w program...

1.2 Ścieżka wyjątków

Gdy w Pythonie wystąpi wyjątek, jest on podnoszony po stosie wywołań, dopóki nie zostanie obsłużony. Stos wywołań to sekwencja wywołań funkcji, które doprowadziły do wystąpienia wyjątku.

Mechanizm podnoszenia wyjątków

  • Wystąpienie wyjątku: Gdy występuje błąd, Python tworzy obiekt wyjątku.
  • Poszukiwanie obsługi wyjątku: Interpreter Pythona rozpoczyna poszukiwania obsługi wyjątku w bieżącym bloku kodu. Jeśli nie znajdzie obsługi, przechodzi do następnego bloku kodu, który wywołał bieżącą funkcję.
  • Podnoszenie wyjątku po stosie: Ten proces powtarza się, dopóki nie zostanie znaleziona obsługa lub stos wywołań nie zostanie wyczerpany.
  • Zakończenie programu: Jeśli obsługa nie zostanie znaleziona, program kończy swoją pracę i wyświetla komunikat o błędzie.

Przykład:


def func_a():
    func_b()
        
def func_b():
    func_c()
        
def func_c():
    print(1 / 0)  # Tutaj występuje wyjątek ZeroDivisionError
        
func_a()
        

W tym przykładzie wyjątek ZeroDivisionError występuje w funkcji func_c, a następnie jest podnoszony po stosie wywołań przez func_b i func_a. Jeśli nigdzie nie zostanie znaleziona obsługa, program zakończy się z błędem.

1.3 Odczytywanie logów

Gdy program kończy się z powodu nieobsłużonego wyjątku, Python wyświetla ślad stosu (traceback), który pomaga programistom zrozumieć, co poszło nie tak. Ślad stosu zawiera informacje o sekwencji wywołań funkcji, które doprowadziły do wystąpienia wyjątku i może być analizowany w celu debugowania programu.

Przykład śladu stosu


Traceback (most recent call last):
    File "example.py", line 10, in 
      
  
      
  
      
  
    func_a() File "example.py", line 2, in func_a func_b() File "example.py", line 5, in func_b func_c() File "example.py", line 8, in func_c print(1 / 0) ZeroDivisionError: division by zero 
  

Analiza śladu stosu

  • Typ wyjątku i komunikat: Na końcu śladu wskazany jest typ wyjątku i komunikat. W przedstawionym przykładzie to ZeroDivisionError: division by zero.
  • Sekwencja wywołań: Ślad stosu pokazuje sekwencję wywołań funkcji. W naszym przykładzie błąd wystąpił w linii print(1 / 0) w funkcji func_c, która została wywołana z func_b, które z kolei zostało wywołane z func_a.
  • Pliki i linie kodu: W każdej linii śladu wskazano plik i numer linii, gdzie wystąpiło wywołanie. To pomaga szybko znaleźć i naprawić błąd w kodzie.

Praktyczne wykorzystanie śladu stosu

Ślad stosu jest ważnym narzędziem do debugowania i analizy programów. Pomaga programistom zrozumieć przyczynę wystąpienia błędu i znaleźć miejsce w kodzie, gdzie wystąpił. Oto kilka porad dotyczących wykorzystania śladu stosu:

  1. Czytanie od dołu w górę: Zacznij analizę od najniższego wywołania w śladzie, ponieważ jest to miejsce, gdzie wystąpił wyjątek.
  2. Sprawdzenie wszystkich wywołań: Zapoznaj się z wszystkimi wywołaniami w śladzie, aby zrozumieć ścieżkę, po której przekazywano wyjątek.
  3. Poprawa kodu: Wykorzystaj informacje ze śladu do poprawy kodu i zapobiegania podobnym błędom w przyszłości.

Więcej o wyjątkach dowiesz się w kolejnych wykładach.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION