Sobes.tech
Junior

Jakie są cechy obsługi wyjątków w Pythonie?

sobes.tech AI

Odpowiedź od AI

Wyjątki w Pythonie to zdarzenia, które zakłócają standardowy przebieg wykonywania programu. Są obiektami reprezentującymi błędy.

Cechy:

  • Hierarchia wyjątków: Wszystkie wbudowane wyjątki są klasami i są zorganizowane w hierarchię opartą na dziedziczeniu od klasy bazowej BaseException.
    # Przykład hierarchii
    # BaseException -> Exception -> StandardError -> ...
    #                  Exception -> ArithmeticError -> ZeroDivisionError
    
  • Bloki try...except...: Główny mechanizm obsługi wyjątków.
    try:
        # Kod, który może wywołać wyjątek
        result = 10 / 0
    except ZeroDivisionError:
        # Obsługa konkretnego wyjątku
        print("Dzielenie przez zero!")
    except Exception as e:
        # Obsługa innych wyjątków
        print(f"Wystąpił błąd: {e}")
    
  • Wiele bloków except: Pozwalają obsługiwać różne typy wyjątków w różny sposób.
    try:
        # Kod
        value = int("abc")
    except ValueError:
        print("Nieprawidłowy format liczby.")
    except TypeError:
        print("Nieprawidłowy typ danych.")
    
  • Blok else: Wykonuje się, jeśli blok try zakończył się bez wyjątków.
    try:
        # Kod
        result = 10 / 2
    except ZeroDivisionError:
        print("Dzielenie przez zero!")
    else:
        print("Operacja zakończona sukcesem.")
    
  • Blok finally: Wykonuje się zawsze, niezależnie od tego, czy wystąpił wyjątek, czy nie. Służy do zwalniania zasobów.
    file = None
    try:
        file = open("myfile.txt", "r")
        # Czytanie z pliku
    except FileNotFoundError:
        print("Plik nie został znaleziony.")
    finally:
        if file:
            file.close() # Gwarantowane zamknięcie pliku
    
  • Operator raise: Służy do jawnego rzucania wyjątku.
    def divide(a, b):
        if b == 0:
            raise ZeroDivisionError("Nie można dzielić przez zero")
        return a / b
    
    try:
        divide(10, 0)
    except ZeroDivisionError as e:
        print(f"Błąd: {e}")
    
  • Własne wyjątki: Można tworzyć własne klasy wyjątków dziedziczące z Exception lub innej istniejącej klasy wyjątku.
    class CustomError(Exception):
        pass
    
    def process_data(data):
        if not data:
            raise CustomError("Dane są puste")
    
    try:
        process_data([])
    except CustomError as e:
        print(f"Błąd: {e}")
    
  • Obsługa wyjątków z użyciem menedżera kontekstu with: Ułatwia pracę z zasobami, które wymagają jawnego zamknięcia (np. plikami).
    try:
        with open("myfile.txt", "r") as file:
            # Praca z plikiem
            content = file.read()
    except FileNotFoundError:
        print("Plik nie został znaleziony.")
    # Plik jest automatycznie zamykany po wyjściu z bloku 'with'
    
  • Łańcuchowe wyjątki: Podczas obsługi wyjątku można zachować informacje o poprzednim wyjątku (implicitnie lub używając raise Exception from another_exception).

Te cechy zapewniają elastyczny i potężny mechanizm obsługi błędów w Pythonie, umożliwiając tworzenie bardziej niezawodnych i odpornych na awarie programów.