CodeGym /Kursy /Python SELF PL /Obsługa wielu wyjątków

Obsługa wielu wyjątków

Python SELF PL
Poziom 17 , Lekcja 3
Dostępny

4.1 Przechwytywanie wielu wyjątków

Python pozwala obsługiwać wiele wyjątków, używając kilku bloków except lub jednego bloku except z krotką wyjątków. Zbadajmy oba podejścia.

Kilka bloków except

Możesz użyć kilku bloków except, aby obsługiwać różne typy wyjątków na różne sposoby.


try:
    # Kod, który może wywołać wyjątek
    result = int("abc")
except ValueError:
    print("Błąd: nieprawidłowa wartość.")
except ZeroDivisionError:
    print("Błąd: dzielenie przez zero.")

Jeden blok except z krotką wyjątków

Możesz obsługiwać wiele wyjątków w jednym bloku except, przekazując je jako krotkę.


try:
    # Kod, który może wywołać wyjątek
    result = int("abc")
except (ValueError, ZeroDivisionError) as e:
    print(f"Wystąpił błąd: {e}")

Użycie except NameError as var

Przy obsłudze wyjątków możesz użyć składni except <ExceptionType> as <variable> do uzyskania obiektu wyjątku. To pozwala na dostęp do informacji o wyjątku, takich jak wiadomość o błędzie i inne atrybuty.


try:
    # Kod, który może wywołać NameError
    print(undeclared_variable)
except NameError as e:
    print(f"Wystąpił błąd: {e}")
    print(f"Typ błędu: {type(e)}")

4.2 Zakres zmiennej błędu

Zmienna, w której przechowywany jest wyjątek (e w powyższym przykładzie), jest dostępna tylko wewnątrz swojego bloku except. Poza tym blokiem zmienna nie jest dostępna.


try:
    # Kod, który może wywołać NameError
    print(undeclared_variable)
except NameError as e:
    print(f"Wystąpił błąd: {e}")
    print(f"Typ błędu: {type(e)}")
# Tutaj e już nie jest dostępna, a następna linia wywoła NameError
# print(e)  # NameError: name 'e' is not defined

Jeśli chcesz coś zrobić z wyjątkiem poza jego blokiem, musisz go zapisać w innej zmiennej. Przykład:


exception = None
try:
    # Kod, który może wywołać wyjątek
    result = int("abc")
except ValueError as e:
    exception = e
    print("Błąd: nieprawidłowa wartość.")
except ZeroDivisionError as e:
    exception = e
    print("Błąd: dzielenie przez zero.")

print(exception)

Zauważ, że zmienna exception przechowuje ostatnio wystąpiony wyjątek, co może być przydatne przy dalszej obróbce poza blokiem try.

4.3 Co zawiera błąd

Obiekt wyjątku zawiera informacje o błędzie. W zależności od typu wyjątku obiekt może zawierać różne atrybuty.

Oto niektóre wspólne atrybuty dostępne dla większości wyjątków:

  • args: Krotka zawierająca argumenty przekazane przy tworzeniu wyjątku. Zazwyczaj jest to wiadomość o błędzie.
  • message: Łańcuch zawierający wiadomość o błędzie (w niektórych wyjątkach).
  • __str__: Metoda zwracająca reprezentację łańcuchową wyjątku. Ta metoda jest używana do uzyskania tekstowej reprezentacji błędu, która zostanie zwrócona przy użyciu funkcji print() na obiekcie wyjątku.

Przykład:


try:
    # Kod, który może wywołać ValueError
    result = int("abc")
except ValueError as e:
    print(f"Wystąpił błąd: {e}")
    print(f"Argumenty błędu: {e.args}")
    print(f"Wiadomość o błędzie: {str(e)}")

Przykład obsługi wielu wyjątków


try:
    # Kod, który może wywołać kilka typów wyjątków
    result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
    print(f"Wystąpił błąd: {e}")
    print(f"Typ błędu: {type(e)}")
    print(f"Argumenty błędu: {e.args}")

Jeśli wystąpi ValueError lub ZeroDivisionError, zostanie on przechwycony przez blok except. Informacje o wyjątku będą dostępne przez zmienną e. Wyjście będzie zawierało typ błędu i argumenty przekazane przy tworzeniu wyjątku.

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