Programowanie asertywne w Pythonie - poradnik z przykładami

Programowanie asertywne w Pythonie - poradnik z przykładami
Autor Adam Pawlak
Adam Pawlak02.11.2023 | 4 min.

Programowanie w języku Python staje się coraz popularniejsze wśród developperów. Język ten oferuje wiele przydatnych narzędzi i technik, które pomagają tworzyć niezawodny i poprawny kod. Jedną z takich technik jest programowanie asertywne, które pozwala na wczesne wykrywanie błędów i ułatwia debugowanie.

Zastosowanie asertywności w Pythonie

Asercje w Pythonie to proste instrukcje, które pozwalają na sprawdzenie, czy założenia dotyczące programu są spełnione w danym momencie działania. Służą głównie do weryfikowania poprawności argumentów funkcji, sprawdzania stanu obiektów oraz ogólnie zapewnienia, że program działa zgodnie z oczekiwaniami.

Programiści wykorzystują asercje w Pythonie najczęściej w następujących sytuacjach:

Sprawdzanie danych wejściowych

Asercje pozwalają szybko zweryfikować, czy parametry przekazywane do funkcji mają oczekiwany typ, zakres wartości i spełniają inne wymagania. Pozwala to wychwycić błędne dane na wczesnym etapie.

Weryfikacja wyników obliczeń

Można użyć asercji do sprawdzenia, czy wyniki krytycznych obliczeń są poprawne i zgodne z oczekiwaniami. Pozwala to szybko zidentyfikować ewentualne błędy w logice programu.

Testy jednostkowe

Asercje są nieodłącznym elementem testów jednostkowych, gdzie służą do weryfikacji poprawności wyników poszczególnych metod i funkcji. Pozwalają szybko wykryć regresje.

Tworzenie asertywnych funkcji i metod

Sprawdzanie poprawności argumentów funkcji

Bardzo przydatne jest sprawdzanie za pomocą asercji, czy argumenty przekazywane do funkcji mają poprawne typy i wartości. Pozwala to wychwycić wiele potencjalnych błędów już na starcie:

def dodaj(a, b):
  assert isinstance(a, int), "a musi być liczbą całkowitą"
  assert isinstance(b, int), "b musi być liczbą całkowitą"
  assert a >= 0, "a musi być nieujemne"

  return a + b

Wykorzystanie asercji do sprawdzania stanu

Asercje mogą służyć do weryfikowania, czy obiekty są w poprawnym stanie w danym momencie działania programu:

def metoda(obiekt):
  assert obiekt.stan == "otwarty", "Niepoprawny stan obiektu"
  # reszta metody

Ograniczenia i zalety asercji

Należy pamiętać, że asercje nie zastępują obsługi wyjątków. Służą jedynie do weryfikacji stanu w trakcie developmentu. Nie powinny mieć żadnych efektów ubocznych. Ich główne zalety to prostota użycia i możliwość szybkiego wykrywania błędów.

Czytaj więcej: 10 zasad pisania czystego kodu w Pythonie

Obsługa błędów asercji

Obsługa wyjątków AssertionError

Gdy warunek w asercji nie zostanie spełniony, interpreter Pythona zgłosi wyjątek AssertionError. Można go przechwycić i obsłużyć tak jak inne wyjątki:

try:
  assert 2 + 2 == 5
except AssertionError:
  print("Wystąpił błąd w asercji!")

Raportowanie niepowodzeń asercji

Możliwe jest dostosowanie komunikatu błędu z asercji, aby ułatwić debugowanie. Wystarczy przekazać wiadomość jako drugi argument:

wartosc = 2
assert wartosc == 2, "Oczekiwano wartości 2, otrzymano: {0}".format(wartosc)

Konfigurowanie zachowania asercji

Można wyłączyć sprawdzanie warunków asercji za pomocą opcji -O przy uruchamianiu skryptu. Jest to przydatne np. po opublikowaniu kodu, gdy debugowanie nie jest już potrzebne.

Przykłady użycia asercji

Walidacja danych wejściowych

def oblicz_premie(platności):
   assert isinstance(platności, list), "Niepoprawny typ danych"
   for placa in platności:
      assert placa > 0, "Pensje muszą być dodatnie"
   # reszta funkcji  

Weryfikacja poprawności obliczeń

def policz_sume(elementy):
   suma = sum(elementy)
   assert suma == sum(elementy), "Błąd w obliczeniach sumy"
   return suma

Testy jednostkowe z asercjami

import unittest

class TestSumy(unittest.TestCase):

    def test_dodawania(self):
        self.assertEqual(1 + 1, 2)

    def test_odejmowania(self):
        self.assertEqual(5 - 3, 2)

Najlepsze praktyki

Umieszczanie asercji blisko potencjalnych błędów

Należy umieszczać asercje jak najbliżej fragmentów kodu, w których mogą pojawić się błędy. Ułatwi to znalezienie źródła problemu.

Unikanie efektów ubocznych w asercjach

Asercje powinny jedynie sprawdzać stan programu, bez wywoływania żadnych dodatkowych akcji czy efektów ubocznych.

Pisanie czytelnych komunikatów asercji

Komunikaty w asercjach powinny jasno wskazywać przyczynę niepowodzenia i ułatwiać zrozumienie problemu.

Podsumowanie i wnioski

Podsumowując, programowanie asertywne to bardzo przydatna technika, która pozwala znacząco zwiększyć niezawodność kodu Python. Dzięki asercjom możliwe jest szybkie wykrywanie błędów już podczas developmentu. Asercje sprawdzają założenia programisty na temat poprawności kodu i pozwalają zweryfikować jego poprawne działanie. W połączeniu z testami jednostkowymi, asertywność może znacząco podnieść jakość kodu.

5 Podobnych Artykułów:

  1. Testowanie i debugowanie kodu w Pythonie - poradnik dla początkujących
  2. Jak pisać czytelne komentarze w kodzie? Porady i przykłady
  3. Jak wybrać specjalizację w programowaniu? Poradnik
  4. Podstawy Linuxa dla programistów - kurs dla początkujących
  5. Najczęstsze problemy początkujących programistów i jak ich unikać
tagTagi
shareUdostępnij
Autor Adam Pawlak
Adam Pawlak

Cześć, jestem Adam, a witajcie na moim blogu o programowaniu! Tutaj znajdziesz wiele przydatnych informacji, porad i inspiracji związanych z fascynującym światem kodowania i rozwoju oprogramowania.

Oceń artykuł
rating-fill
rating-fill
rating-fill
rating-fill
rating-fill
Ocena: 0.00 Liczba głosów: 0

Komentarze (0)

email
email

Polecane artykuły