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 funkcjiprint()
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.
GO TO FULL VERSION