m06-error-handling
CRITICAL: Use for error handling. Triggers: Result, Option, Error, ?, unwrap, expect, panic, anyhow, thiserror, when to panic vs return Result, custom error, error propagation, 错误处理, Result 用法, 什么时候用 panic
Installation
Pick a client and clone the repository into its skills directory.
Installation
About this skill
CRITICAL: Use for error handling. Triggers: Result, Option, Error, ?, unwrap, expect, panic, anyhow, thiserror, when to panic vs return Result, custom error, error propagation, 错误处理, Result 用法, 什么时候用 panic
How to use
Zainstaluj skill m06-error-handling w swoim środowisku pracy z Rust (np. jako część actionbook skills lub jako referencję w dokumentacji projektu).
Kiedy napotkasz kod z unwrap, expect, panic lub znakiem zapytania (?), zatrzymaj się i zadaj sobie pytanie: czy ten błąd jest oczekiwany w normalnej operacji, czy to oznacza bug? Jeśli błąd jest możliwy w normalnym działaniu, powinien być obsługiwany jako Result<T, E> lub Option
. Określ, kto powinien obsłużyć błąd — czy to funkcja bieżąca (match/if-let), czy jej wywołujący (propagacja za pomocą ?), czy użytkownik (przyjazny komunikat), czy programista (panic z opisem). To określi, czy zwrócisz Result, Option, czy panikujesz.
Jeśli zwracasz Result, zaprojektuj typy błędów używając thiserror do jasnego zdefiniowania wariantów błędów, lub użyj anyhow do dodania kontekstu do istniejących błędów. Unikaj zbyt wielu wariantów błędów — jeśli masz ich za dużo, pytanie brzmi: czy model danych jest prawidłowy?
Sprawdź, czy błąd ma wystarczający kontekst dla wywołującego — czy wie, jaki typ błędu się pojawił, gdzie w łańcuchu wywołań i jakie informacje debugowania są dostępne. Użyj .context() z anyhow, aby dodać wyjaśnienia.
Jeśli nie jesteś pewny strategii, przejrzyj m09-domain i m13-domain-error, aby zrozumieć, czy model domeny i wymagania odzyskiwania błędów wpływają na Twoją decyzję.