Obsługa błędów w Pythonie
W tym artykule wyjaśnimy obsługę błędów w Pythonie.
YouTube Video
Obsługa błędów w Pythonie
Obsługa błędów w Pythonie jest głównie realizowana za pomocą słów kluczowych try, except, else i finally. Użycie tych konstrukcji pozwala odpowiednio reagować, gdy w Twoim programie wystąpi błąd. Poniżej wyjaśnimy, jak korzystać z każdego z nich.
Blok try
W bloku try umieszczasz kod, który chcesz wykonać. Jeśli w tym bloku wystąpi błąd, wykonanie programu natychmiast przechodzi do bloku except.
1try:
2 # Code that may raise an error (division by zero, for example)
3 #number = int(input("Enter a number: "))
4 number = int("abc")
5 result = 10 / number
6 print("Result:", result)
7except ValueError as e:
8 # Handle invalid input (e.g. non-numeric input)
9 print("Invalid input. Please enter a whole number.")
10 print(f"Value error: {e}")
11except ZeroDivisionError as e:
12 # Handle division by zero error
13 print("Cannot divide by zero!")
14 print(f"Zero division error: {e}")- Ten kod jest przykładem wykrywania błędów w bloku
tryi odpowiedniego ich obsługiwania poprzez przechwytywanie wyjątkówValueErrorlubZeroDivisionError.
Blok except
W bloku except umieszczasz kod, który zostanie wykonany, gdy wystąpi określony wyjątek (błąd). Możesz również przechwytywać określone wyjątki w zależności od rodzaju występującego wyjątku.
1try:
2 #number = int(input("Enter a number: "))
3 number = 0
4 result = 10 / number
5 print("Result:", result)
6except ZeroDivisionError as e:
7 print("Cannot divide by zero!")
8 print(f"Zero division error: {e}")
9except ValueError as e:
10 print("Input was not a valid integer.")
11 print(f"Value error: {e}")- Ten kod jest przykładem wykonania innej obsługi dla każdego typu wyjątku w bloku
except, gdy wystąpi błąd w blokutry.
Obsługa wielu wyjątków jednocześnie
Użyj krotki, gdy wiele klas wyjątków może mieć wspólną logikę obsługi.
1try:
2 my_list = [1, 2]
3 result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5 print(f"Exception occurred: {e}")- Ten kod jest przykładem przechwytywania zarówno
IndexError, jak iZeroDivisionErrorrazem oraz obsługi tych wyjątków w ten sam sposób.
Bezwarunkowe przechwytywanie wyjątków
Pomiń argument dla except, jeśli chcesz obsłużyć wszystkie typy wyjątków w jednym bloku.
1try:
2 # This code might cause some exception
3 result = "10" + 5 # TypeError
4except Exception as e:
5 print("Unexpected error")- Jednak obsługa konkretnych wyjątków zamiast bezwarunkowego przechwytywania wszystkich wyjątków jest bardziej pomocna w wykrywaniu błędów i debugowaniu. Kiedy to możliwe, jawna obsługa tylko przewidywanych wyjątków, takich jak
ValueErrorlubTypeError, zwiększy odporność Twojego kodu.
Blok else
Blok else jest wykonywany tylko wtedy, gdy w bloku try nie wystąpią żadne błędy.
1try:
2 #number = int(input("Enter a number: "))
3 number = 5
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)- Ten kod jest przykładem, w którym blok
elsejest wykonywany tylko wtedy, gdy w blokutrynie wystąpi żaden błąd.
Blok finally
Blok finally służy do umieszczenia kodu, który zawsze będzie wykonany na końcu, niezależnie od tego, czy w bloku try wystąpił błąd. Jest to przydatne do zwalniania zasobów lub wykonywania zadań porządkowych.
1try:
2 #number = int(input("Enter a number: "))
3 number = int("abc")
4 result = 10 / number
5except ZeroDivisionError as e:
6 print("Cannot divide by zero!")
7 print(f"Zero division error: {e}")
8except ValueError as e:
9 print("Input was not a valid integer.")
10 print(f"Value error: {e}")
11else:
12 # This block will execute only if no exceptions were raised
13 print("Result:", result)
14finally:
15 # This block will always execute, regardless of whether an exception was raised
16 print("Execution completed.")- Ten kod jest przykładem pokazującym, że blok
finallyjest wykonywany niezależnie od tego, czy wystąpi wyjątek, czy nie.
Słowo kluczowe raise
Można również zgłosić wyjątek za pomocą słowa kluczowego raise, gdy nie są spełnione określone warunki w istniejącym kodzie.
1def divide(a, b):
2 if b == 0:
3 raise ValueError("Cannot divide by zero.")
4 return a / b
5
6try:
7 result = divide(10, 0)
8except ValueError as e:
9 print(f"Error: {e}")- Ten kod jest przykładem jawnego zgłaszania wyjątku za pomocą słowa kluczowego
raise, gdy warunek nie zostanie spełniony.
Wnioski
Dzięki takiej obsłudze błędów możesz zapobiec awariom programu, wyświetlić odpowiednie komunikaty użytkownikowi oraz kontynuować dalsze przetwarzanie programu.
Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.