0Pricing
Python Academy · Lekcja

try / except / else / finally

Proszę porządkować bloki obsługi wyjątków na potrzeby różnych scenariuszy.

try / except / else / finally to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Wprowadzenie

Konstrukcja try/except/else/finally języka Python zapewnia pełną kontrolę nad obsługą błędów i sprzątaniem zasobów.

Podstawowe try/except

try: risky_code() except ExceptionType: handle() — Python wykonuje blok except tylko wtedy, gdy zostanie zgłoszony wyjątek danego typu.
try:
    x = int('abc')
except ValueError:
    print('not a number')

Przechwytywanie obiektu wyjątku

except ValueError as e: przypisuje wyjątek do e. Aby uzyskać komunikat, należy użyć str(e) lub e.args.
try:
    int('oops')
except ValueError as e:
    print(f'Error: {e}')

Przechwytywanie wielu wyjątków

except (TypeError, ValueError) as e: przechwytuje wyjątek dowolnego z tych typów.
for val in ['abc', None, 42]:
    try:
        print(int(val))
    except (TypeError, ValueError) as e:
        print(f'skipping {val!r}: {e}')

Puste except (należy go unikać)

except: (bez typu) przechwytuje WSZYSTKO, w tym KeyboardInterrupt i SystemExit. Prawie zawsze jest to błąd — należy zawsze określać typy.
try:
    risky = 1/0
except ZeroDivisionError:
    print('division error')  # specific

Wiele klauzul except

Można użyć wielu bloków except, z których każdy obsługuje inny typ. Python sprawdza je w kolejności występowania.
def process(val):
    try:
        return 10 / int(val)
    except ValueError:
        print('not a number')
    except ZeroDivisionError:
        print('division by zero')
process('abc')
process('0')

Klauzula else

try/except/else: blok else jest wykonywany tylko wtedy, gdy NIE wystąpił wyjątek. Należy go używać dla kodu, który powinien wykonać się po pomyślnym zakończeniu operacji.
try:
    x = int('42')
except ValueError:
    print('bad input')
else:
    print('parsed:', x)

Klauzula finally

finally: jest wykonywane ZAWSZE — po pomyślnym wykonaniu try, po except, a nawet po return lub break. Doskonale nadaje się do sprzątania zasobów.
def read_file(path):
    f = None
    try:
        f = open(path)
        return f.read()
    except FileNotFoundError:
        return None
    finally:
        if f: f.close()
print(read_file('/nonexistent'))

finally z return

Jeśli występują zarówno return, jak i finally, najpierw wykonywane jest finally, ale wygrywa wartość zwracana przez finally. Należy zachować ostrożność.
def demo():
    try:
        return 'try'
    finally:
        return 'finally'  # overrides!
print(demo())

Zagnieżdżone bloki try

Bloki try można zagnieżdżać. Wyjątek z wewnętrznego bloku jest propagowany na zewnątrz, jeśli nie zostanie przechwycony przez wewnętrzny blok except.
try:
    try:
        x = 1/0
    except ValueError:
        print('inner')
except ZeroDivisionError:
    print('outer caught it')

Rejestrowanie wyjątków

import logging; logging.exception('msg') rejestruje pełny traceback. Doskonale sprawdza się w kodzie produkcyjnym.
import logging
try:
    1/0
except ZeroDivisionError:
    logging.exception('Caught an error')

Szybkie sprawdzenie

Która klauzula jest wykonywana niezależnie od tego, czy wystąpił wyjątek?

Podsumowanie

try/except przechwytuje błędy. else jest wykonywane po pomyślnym zakończeniu. finally jest wykonywane zawsze (sprzątanie zasobów). Należy przechwytywać konkretne typy i unikać pustego except. Za pomocą as e można uzyskać dostęp do wyjątku.

Kontynuuj naukę

Świetna praca! Przejdź do następnej lekcji, aby kontynuować naukę.

Często zadawane pytania

Czy lekcja „try / except / else / finally” jest bezpłatna?

Tak — pełny tekst „try / except / else / finally” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „try / except / else / finally”?

Proszę porządkować bloki obsługi wyjątków na potrzeby różnych scenariuszy. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „try / except / else / finally”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Zrozumienie wyjątków
  2. try / except / else / finally
  3. Zgłaszanie i ponowne zgłaszanie wyjątków
  4. Niestandardowe klasy wyjątków
← Powrót do Python Academy