0Pricing
Learn Rust Coding · Lektion

thiserror

Benutzerdefinierte Fehlertypen

thiserror ist eine kostenlose Learn Rust Coding-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Learn Rust Coding-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.

Warum benutzerdefinierte Fehler?

Bibliotheken sollten aussagekräftige Fehlertypen bereitstellen, damit Aufrufer auf bestimmte Fehler reagieren können. Wenn Sie diese von Hand schreiben, entsteht viel Boilerplate-Code. Das Crate thiserror generiert ihn für Sie.

thiserror hinzufügen

Fügen Sie es als Abhängigkeit hinzu. Es handelt sich um ein Crate für Derive-Makros ohne Laufzeitkosten.

[dependencies]
thiserror = "1.0"

Eine Error-Enum definieren

Leiten Sie Error für eine Enum her, deren Varianten jeweils einen bestimmten Fehler darstellen. Das Attribut #[error("...")] stellt die Display-Nachricht bereit.

use thiserror::Error;

#[derive(Error, Debug)]
pub enum DataError {
    #[error("item not found")]
    NotFound,
    #[error("invalid input: {0}")]
    Invalid(String),
}

Felder interpolieren

Die Nachrichtenzeichenfolge kann auf benannte oder positionale Felder verweisen, sodass der Fehlertext zusätzlichen Kontext enthält.

use thiserror::Error;

#[derive(Error, Debug)]
pub enum ConfigError {
    #[error("missing key: {key}")]
    Missing { key: String },
    #[error("value {0} out of range")]
    OutOfRange(i32),
}

Automatische Implementierung von Display und Error

Das Derive-Makro implementiert automatisch sowohl Display (anhand Ihrer Nachrichten) als auch std::error::Error. Manuelle impl-Blöcke sind nicht erforderlich.

Einen Quellfehler umschließen

#[from] generiert eine From-Implementierung, sodass der Operator ? einen zugrunde liegenden Fehler in Ihren Typ umwandeln kann. #[source] kennzeichnet die Ursache.

use thiserror::Error;

#[derive(Error, Debug)]
pub enum AppError {
    #[error("io failure")]
    Io(#[from] std::io::Error),
    #[error("parse failure")]
    Parse(#[from] std::num::ParseIntError),
}

Verwendung mit ?

Dank #[from] wandelt der Operator ? Standardfehler automatisch in Ihren Typ AppError um.

fn read_number(path: &str) -> Result<i32, AppError> {
    let text = std::fs::read_to_string(path)?; // io::Error -> AppError
    let n: i32 = text.trim().parse()?;          // ParseIntError -> AppError
    Ok(n)
}

Die Fehlerkette der Quelle

Wenn Sie einen Fehler umschließen, stellt thiserror die Ursache über Error::source bereit. Dadurch sind vollständige Fehlerketten für Protokollierung und Debugging möglich.

Transparente Fehler

#[error(transparent)] leitet sowohl Display als auch die Quelle an den umschlossenen Fehler weiter. Das ist für eine durchreichende Variante nützlich.

use thiserror::Error;

#[derive(Error, Debug)]
pub enum WrapError {
    #[error(transparent)]
    Other(#[from] std::io::Error),
}

Wann Sie thiserror verwenden sollten

Verwenden Sie thiserror, wenn:

  • Sie eine Bibliothek schreiben
  • Aufrufer auf bestimmte Fehlervarianten prüfen müssen
  • Sie eine stabile, typisierte Fehler-API bereitstellen möchten

Für Anwendungen, in denen Fehler einfach weitergereicht werden sollen, ist anyhow oft einfacher.

Varianten abgleichen

Da es sich beim Fehler um eine echte Enum handelt, können Aufrufer mit match darauf prüfen und auf jede Fehlerart unterschiedlich reagieren.

fn handle(err: AppError) {
    match err {
        AppError::Io(_) => println!("retry the file operation"),
        AppError::Parse(_) => println!("ask the user to fix input"),
    }
}

Schnelltest

Was generiert das Attribut #[from] in einer thiserror-Enum?

Zusammenfassung

Sie haben das Crate thiserror gelernt:

  • #[derive(Error)] generiert Display- und Error-Implementierungen
  • #[error("...")] definiert Nachrichten mit Feldinterpolation
  • #[from] ermöglicht die Umwandlung von Quellfehlern mit ?
  • transparent leitet an einen umschlossenen Fehler weiter
  • Ideal für typisierte Fehler-APIs von Bibliotheken

Häufig gestellte Fragen

Ist die Lektion „thiserror“ kostenlos?

Ja — der vollständige Text von „thiserror“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Learn Rust Coding-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „thiserror“?

Benutzerdefinierte Fehlertypen Du übst Learn Rust Coding mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Learn Rust Coding zu starten?

Keine Vorkenntnisse erforderlich. Learn Rust Coding auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „thiserror“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Learn Rust Coding-Lektion Code schreiben und ausführen?

Ja. Jede Learn Rust Coding-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Result und der ?-Operator
  2. thiserror
  3. anyhow
  4. Fehlerkonvertierung
← Zurück zu Learn Rust Coding