Jak obsługiwać wyjątki w Pythonie (spróbuj z wyjątkiem-w końcu)

Dowiedz się, jak obsługiwać wyjątki w Pythonie za pomocą bloków try, z wyjątkiem, else i wreszcie. Napisz bezbłędny i odporny na awarie kod w Pythonie.

Wypróbuj to rozwiązanie w Edytorze

Przegląd

Solidne oprogramowanie musi być przygotowane na nieoczekiwane warunki, takie jak brakujące pliki, nieprawidłowe dane wejściowe użytkownika, awarie baz danych lub zakłócenia sieci. Gdy w Pythonie wystąpi błąd, zgłasza wyjątek. Jeśli nie zostaną obsłużone, wyjątki natychmiast zatrzymują program i drukują stos śledzenia.

Podstawowym narzędziem Pythona do zarządzania błędami środowiska wykonawczego jest blok „try-except”. Umieszczasz kod, który może zgłosić błąd w bloku „try”, i definiujesz kod obsługi błędów w jednym lub większej liczbie bloków „z wyjątkiem”. Zdecydowanie zaleca się określenie dokładnej klasy wyjątku (np. `ValueError` lub `ZeroDivisionError`), ponieważ wychwytywanie wszystkich ogólnych wyjątków (`except:`) może maskować błędy.

Aby przepływ wyjątków był bardziej wyrazisty, Python udostępnia dwa dodatkowe bloki: „else” i „w końcu”. Blok „else” jest wykonywany tylko wtedy, gdy w bloku „try” nie zgłoszono wyjątków, co jest przydatne w przypadku kodu, który powinien działać tylko w przypadku powodzenia. Blok „w końcu” jest wykonywany *zawsze*, niezależnie od tego, czy wystąpił wyjątek, co czyni go idealnym miejscem do czyszczenia, takiego jak zamykanie plików lub połączeń z bazami danych.

Dane wyjściowe kodu i wykonania

Ten skrypt demonstruje solidną obsługę błędów w Pythonie za pomocą try, z wyjątkiem, else i wreszcie.

handle_errors.py
Spróbuj w Edytorze
def divide_numbers(a, b):
    try:
        # Code that might raise an exception
        result = a / b
    except ZeroDivisionError:
        # Handling a specific exception
        print("Error: Cannot divide by zero!")
    except TypeError:
        # Handling another exception type
        print("Error: Inputs must be numbers!")
    else:
        # Run only if try block succeeded
        print(f"Success! Result of {a}/{b} is {result}")
    finally:
        # Runs no matter what
        print("Division attempt completed.")

divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)
Wyjście terminala
Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.

Wdrażanie krok po kroku

  • Umieść kod, który może zakończyć się niepowodzeniem, w bloku try.
  • Wychwytuj określone typy błędów za pomocą bloków z wyjątkiem wyjątku:, aby sprawnie obsługiwać awarie.
  • Użyj else dla kodu, który musi zostać wykonany tylko po pomyślnych blokach try.
  • Użyj w końcu, aby zagwarantować, że działania czyszczące zostaną uruchomione niezależnie od błędów.

Często zadawane pytania

Czy mogę przechwycić wiele wyjątków w jednym bloku z wyjątkiem?

Tak, możesz przekazać je jako krotkę: z wyjątkiem (ValueError, TypeError) jako e:.

Jak zgłosić własne wyjątki?

Użyj słowa kluczowego raise, po którym następuje instancja wyjątku: raise ValueError("Nieprawidłowa wartość konfiguracyjna").

Powiązane tematy

Polecane zasoby Pythona

Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.