Obsługa wyjątków w Pythonie
Wyjątki to błędy, które mogą wystąpić podczas wykonywania programu. Python pozwala na ich obsługę, aby program nie przerywał działania.
Podstawowa obsługa wyjątków:
Używamy bloków try i except:
try:
number = 0 # Symulujemy problematyczną wartość
result = 10 / number
print(f"Wynik: {result}")
except:
print("Wystąpił błąd!")Obsługa konkretnych wyjątków:
try:
number = 0 # Dzielenie przez zero
result = 10 / number
print(f"Wynik: {result}")
except ValueError:
print("To nie jest liczba!")
except ZeroDivisionError:
print("Nie można dzielić przez zero!")
except Exception as e:
print(f"Wystąpił nieoczekiwany błąd: {e}")
# Przykład z ValueError
try:
number = int("abc") # Próba konwersji tekstu na liczbę
print(number)
except ValueError:
print("To nie jest liczba!")Najczęstsze typy wyjątków:
ValueError– nieprawidłowa wartośćTypeError– nieprawidłowy typ danychZeroDivisionError– dzielenie przez zeroIndexError– indeks poza zakresemKeyError– klucz nie istnieje w słownikuFileNotFoundError– plik nie istnieje
Blok else i finally:
try:
number = 5 # Prawidłowa wartość
result = 10 / number
except ValueError:
print("To nie jest liczba!")
except ZeroDivisionError:
print("Nie można dzielić przez zero!")
else:
# Wykonuje się tylko jeśli nie było wyjątku
print(f"Wynik: {result}")
finally:
# Wykonuje się zawsze, niezależnie od wyjątku
print("Koniec programu")
# Przykład z wyjątkiem
try:
number = 0 # Będzie błąd
result = 10 / number
except ZeroDivisionError:
print("Nie można dzielić przez zero!")
else:
print(f"Wynik: {result}")
finally:
print("Koniec programu")Rzucanie wyjątków:
Możesz samodzielnie rzucać wyjątki używając raise:
def check_age(age):
if age < 0:
raise ValueError("Wiek nie może być ujemny!")
elif age > 150:
raise ValueError("Wiek jest nieprawdopodobny!")
else:
print(f"Wiek: {age}")
try:
check_age(-5)
except ValueError as e:
print(f"Błąd: {e}")
try:
check_age(200)
except ValueError as e:
print(f"Błąd: {e}")Własne wyjątki:
class TooYoungError(Exception):
pass
def check_driving_age(age):
if age < 18:
raise TooYoungError("Musisz mieć 18 lat, żeby prowadzić samochód!")
else:
print("Możesz prowadzić samochód!")
try:
check_driving_age(16)
except TooYoungError as e:
print(f"Błąd: {e}")Przykłady praktyczne:
# Obsługa dostępu do listy
fruits = ["jabłko", "banan", "pomarańcza"]
try:
print(fruits[5]) # Indeks poza zakresem
except IndexError:
print("Indeks poza zakresem listy!")
# Obsługa dostępu do słownika
person = {"name": "Jan", "age": 30}
try:
print(person["city"]) # Klucz nie istnieje
except KeyError:
print("Klucz nie istnieje w słowniku!")
# Bezpieczniejszy sposób
city = person.get("city", "Nieznane")
print(f"Miasto: {city}")Dobre praktyki:
- Zawsze obsługuj konkretne wyjątki, nie używaj pustego
except - Używaj
finallydo czyszczenia zasobów - Nie ukrywaj błędów – loguj je lub wyświetlaj użytkownikowi
- Używaj
raisedo przekazywania wyjątków dalej
Ćwiczenie:
Napisz program z obsługą różnych typów wyjątków.
Brak odpowiedzi