Zig Academy · Lekcja

Zawijanie i ponowne zgłaszanie błędów

Dodawaj kontekst, gdy błędy przemieszczają się w górę stosu.

Lekcja 4 z 413 kroki

Zawijanie i ponowne zgłaszanie błędów to bezpłatna lekcja Zig Academy na CoddyKit. To lekcja 4 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 Zig Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Zig Academy zawiera 4 lekcji w sumie.

Błędy przemieszczają się w górę

Gdy funkcja nie może samodzielnie obsłużyć niepowodzenia, przekazuje błąd wywołującemu. Po drodze można go zmodyfikować lub ponownie zgłosić.

Ponowne zgłaszanie za pomocą try

Najprostszym sposobem ponownego zgłoszenia błędu jest try. Przekazuje ono oryginalny błąd wywołującemu bez zmian, więc ta sama wartość przepływa dalej w górę.

const data = try readFile(path);

Przechwyć, a następnie zwróć

Aby przekształcić błąd, należy go przechwycić za pomocą catch i zwrócić inny. W ten sposób błąd niskiego poziomu zostaje zastąpiony błędem pasującym do własnego API.

const f = open(path) catch return error.ConfigMissing;

Mapowanie błędów za pomocą switch

Można połączyć catch z instrukcją switch, aby przypisać każdemu bazowemu błędowi bardziej zrozumiały odpowiednik, a pozostałe przekazywać dalej bez zmian.

parse(s) catch |e| switch (e) {
    error.Empty => return error.NoInput,
    else => return e,
};

Zig nie przechowuje śladów stosu w wartościach

Błąd w Zig jest tylko znacznikiem, a nie obiektem przechowującym dodatkowy kontekst. Aby dodać szczegóły, należy ponownie zgłosić własny, bardziej opisowy błąd.

Dołącz kontekst osobno

Ponieważ znacznik błędu nie zawiera komunikatu, należy zapisać szczegóły w logu w miejscu wystąpienia awarii, a następnie zwrócić wywołującemu błąd wyższego poziomu.

open(path) catch |e| {
    std.log.err("open {s}: {}", .{ path, e });
    return error.LoadFailed;
};

Rozszerz zbiór błędów

Jeśli zwracany jest nowy błąd, zbiór błędów funkcji musi go zawierać. Wywnioskowany zbiór !T rozszerza się tak, aby obejmować wszystko, co funkcja zwraca.

fn load() !Config {
    return open(".cfg") catch error.LoadFailed;
}

Zachować czy zastąpić

Decyzję należy podejmować na każdej warstwie: przekazać dokładnie ten sam błąd za pomocą try albo zastąpić go takim, który lepiej pasuje do wywołującego. Oba rozwiązania są poprawne.

Zachowaj czyste granice

Na granicy modułu należy mapować wewnętrzne błędy na niewielki publiczny zbiór. Wywołujący zależą wtedy od stabilnych nazw, a nie od szczegółów implementacji.

Połącz z errdefer

Podczas ponownego zgłaszania błędu każde znajdujące się w zakresie errdefer nadal wykona się jako pierwsze. Można więc wycofać zasoby i przekształcić błąd w ramach jednej ścieżki.

Znaczące niepowodzenia

Opakowanie błędów przekształca surową przyczynę w komunikat pasujący do domeny. Wywołujący widzi zrozumiały błąd, a nie szczegół implementacji wewnętrznej.

Szybkie sprawdzenie

Chcą Państwo zastąpić niskopoziomowy błąd error.NotFound własnym błędem error.ConfigMissing dla wywołującego. Które rozwiązanie zadziała?

Podsumowanie

Ponownie zgłaszali Państwo błędy za pomocą try, mapowali je przez catch i switch, zapisywali kontekst w logu oraz rozszerzali zbiory błędów, aby zachować znaczenie niepowodzeń. ✅

Bezpłatny start

Ucz się Zig dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Zawijanie i ponowne zgłaszanie błędów” jest bezpłatna?

Tak — pełny tekst „Zawijanie i ponowne zgłaszanie błędów” 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 Zig Academy, przejdź na CoddyKit PRO. Kurs Zig Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zawijanie i ponowne zgłaszanie błędów”?

Dodawaj kontekst, gdy błędy przemieszczają się w górę stosu. Ćwiczysz Zig 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ąć Zig Academy?

Nie wymagamy żadnego doświadczenia. Zig 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 4 z 4.

Ile czasu zajmuje lekcja „Zawijanie i ponowne zgłaszanie błędów”?

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 Zig Academy?

Tak. Każda lekcja Zig 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. Odzyskiwanie za pomocą catch
  2. Przełączanie na podstawie konkretnych błędów
  3. errdefer do sprzątania po niepowodzeniu
  4. Zawijanie i ponowne zgłaszanie błędów
← Powrót do Zig Academy