Result ·
Option ·
unwrap ·
? Operator ·
panic! ·
anyhow / thiserror
Rust unterscheidet zwischen behebbaren und unbehebbaren Fehlern. Die Fehlerbehandlung ist explizit und typsicher – das macht Rust-Programme robust und zuverlässig.
Result<T, E> ist der zentrale Typ für behebbare Fehler in Rust. Er kann entweder einen erfolgreichen Wert (Ok(T)) oder einen Fehler (Err(E)) enthalten. Die Fehlerbehandlung ist explizit und typsicher.
Result zwingt Sie, Fehler explizit zu behandeln. Das macht Rust-Code robust und vorhersagbar. Verwenden Sie match oder den ?-Operator für elegante Fehlerweitergabe.
Option<T> repräsentiert einen Wert, der vorhanden sein kann (Some(T)) oder nicht (None). Er wird verwendet, wenn ein Fehler nicht die richtige Semantik hat (z.B. "Wert nicht gefunden").
Option wird oft für fehlende Werte verwendet (z.B. bei HashMap::get() oder Vec::get()). unwrap_or() und unwrap_or_else() sind praktisch für Default-Werte.
unwrap() und expect() entpacken Result oder Option – bei Err oder None wird ein panic! ausgelöst. Sie sollten nur verwendet werden, wenn Sie sicher sind, dass kein Fehler auftritt.
unwrap() und expect() sollten in Produktionscode vermieden werden, es sei denn, Sie sind absolut sicher, dass kein Fehler auftritt. Verwenden Sie stattdessen den ?-Operator oder explizite Fehlerbehandlung mit match.
Der ? Operator ist eine Abkürzung für die Fehlerweitergabe. Bei Result gibt er bei Err den Fehler zurück, bei Ok wird der Wert entpackt. Bei Option gibt er bei None None zurück.
?-Operator kann nur in Funktionen verwendet werden, die Result oder Option zurückgeben. In main() können Sie Result<(), Box<dyn Error>> als Rückgabetyp verwenden.
panic! wird für unbehebbare Fehler verwendet, die nicht sinnvoll behandelt werden können. Es beendet das Programm und gibt eine Fehlermeldung aus. unwrap() und expect() rufen intern panic! auf.
panic! nur für kritische Fehler, die nicht behoben werden können (Programmfehler, invariante Verletzungen). Für erwartbare Fehler (Benutzereingabe, Dateioperationen) verwenden Sie Result.
anyhow und thiserror sind zwei populäre Crates für die Fehlerbehandlung. anyhow vereinfacht die Fehlerweitergabe, thiserror hilft bei der Definition eigener Fehlertypen.
| Crate | Verwendung | Vorteil |
|---|---|---|
| anyhow | Anwendungen, CLI-Tools | Einfache Fehlerweitergabe, automatische Konvertierung |
| thiserror | Bibliotheken, APIs | Strukturierte Fehlertypen, `std::error::Error`-Implementierung |
anyhow die richtige Wahl. Für Bibliotheken verwenden Sie thiserror, um Ihren Nutzern strukturierte Fehlertypen zu bieten.
Result
Option
unwrap
?
panic!
anyhow
fn read_file() -> Result<String, io::Error> { let mut f = File::open("file.txt")?; ... }