17

Błędy i try / except – program, którego nie da się wywalić

Materiały tej lekcji są na razie tylko do czytania na stronie. Kod przepisz albo skopiuj do swojego edytora.

Czego się nauczysz

Wpisujesz literę zamiast liczby i program przerywa działanie czerwonym komunikatem. Nie ma wyniku, nie ma menu, nie ma niczego dalej. Na tej lekcji nauczysz się pisać program, którego nie da się w ten sposób wywalić.

Po tej lekcji:

Bez zabezpieczenia program po prostu ginie

wiek = int(input("Wiek: "))
# wpisano: abc
# ValueError: invalid literal for int() with base 10: 'abc'

Nazwa błędu jest podpowiedzią. ValueError znaczy: dostałem tekst, ale jego wartości nie da się przerobić na liczbę. To najczęstszy błąd, jaki będziesz łapać.

Na egzaminie program, który przerywa działanie, kosztuje punkty w części „implementacja, kompilacja i uruchomienie programów”, a nie tylko w samym zadaniu.

try i except – łapanie błędu

try:
    wiek = int(input("Wiek: "))
    print(f"Za rok {wiek + 1}")
except ValueError:
    print("To nie jest liczba!")

Czytaj to jak zdanie: spróbuj wykonać blok try. Jeśli poleci błąd o nazwie ValueError, nie przerywaj programu – wykonaj zamiast tego blok except.

Jeśli w bloku try wszystko pójdzie dobrze, blok except w ogóle się nie wykona.

Nigdy gołe except:

Nie pisz samego except: bez nazwy błędu. Takie except łapie wszystko, w tym twoje własne literówki. Zamiast właściwego komunikatu zobaczysz „To nie jest liczba”, choć problem był zupełnie gdzie indziej – i będziesz go długo szukać.

Zawsze podawaj nazwę błędu po słowie except.

Cztery błędy, które realnie spotkasz

Pierwszy pokrywa większość sytuacji. Drugi łapiesz przy każdej średniej. Trzeci i czwarty to raczej własne pomyłki niż wina użytkownika – te lepiej naprawić w kodzie, niż przechwytywać.

Można podać kilka nazw naraz: except (ValueError, ZeroDivisionError):

Dodatek: else i finally

W kodzie z lekcji na końcu jest ciekawostka: blok else wykonuje się tylko wtedy, gdy błędu nie było, a finally wykonuje się zawsze. Nie są wymagane na egzaminie, ale warto je kojarzyć.

Spróbuj sam

Kod z tej lekcji nie czeka na klawiaturę – złe dane są w nim symulowane, żebyś od razu widział wynik.

Zadania z lekcji:

  1. Program prosi o liczbę całkowitą i wypisuje jej kwadrat. Po wpisaniu tekstu wypisuje „To nie jest liczba całkowita!” i kończy się normalnie, bez czerwonego błędu.
  2. Program prosi o dwie liczby i wypisuje wynik dzielenia. Zabezpiecz go zarówno przed tekstem, jak i przed dzieleniem przez zero – dwie różne nazwy błędów.
  3. Weź swój program liczący pole prostokąta z poprzedniej lekcji i zabezpiecz go blokiem try oraz except.
  4. Napisz program z gołym except: i sprawdź, co się stanie, gdy w bloku try zrobisz literówkę w nazwie zmiennej. Opisz wynik w komentarzu.

Sprawdź się

Na następnej lekcji: ostatnia lekcja tego bloku. Połączysz pętlę, warunek i przechwytywanie błędów w jeden wzorzec – program, który nie puści dalej, dopóki nie dostanie poprawnej wartości.

Notatki

PDF
Zadania utrwalające Karta pracy do tej lekcji: zadania sprawdzające i domowe do samodzielnego zrobienia w swoim edytorze · 5 stron.
Zadania utrwalające – Błędy i try / except – program, którego nie da się wywalić
Strona 1 z 5 Strona 2 z 5 Strona 3 z 5 Strona 4 z 5 Strona 5 z 5

Prezentacja

Slajd 1 z 6
1 / 6

Kod

Otwórz kod, zmieniaj go i uruchamiaj na stronie – np. usuń # z linii oznaczonej jako błąd i zobacz, co się stanie. „Przywróć” wraca do wersji z lekcji.

PY
demo_17_try-except.py Kod z lekcji – otwórz, zmieniaj i uruchamiaj; wynik zobaczysz obok kodu.
demo_17_try-except.py
Wynik programu
Kliknij „Uruchom”, żeby zobaczyć tutaj wynik programu.