thiserror
Brugerdefinerede fejltyper
thiserror er en gratis Lær at programmere i Rust-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær at programmere i Rust, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.
Hvorfor brugerdefinerede fejl?
Biblioteker bør eksponere meningsfulde fejltyper, så kaldere kan reagere på specifikke fejl. Hvis du skriver disse i hånden, får du en masse gentagen kode. Craten thiserror genererer den for dig.
Tilføjelse af thiserror
Tilføj den som en afhængighed. Det er en crate med derive-makroer, som ikke medfører nogen kørselsomkostning.
[dependencies]
thiserror = "1.0"Definition af en fejl-enum
Derive Error på en enum, hvor hver variant repræsenterer en særskilt fejl. Attributten #[error("...")] angiver Display-meddelelsen.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum DataError {
#[error("item not found")]
NotFound,
#[error("invalid input: {0}")]
Invalid(String),
}Indsættelse af felter
Meddelelsesstrengen kan referere til navngivne eller positionelle felter, så fejlteksten indeholder kontekst.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum ConfigError {
#[error("missing key: {key}")]
Missing { key: String },
#[error("value {0} out of range")]
OutOfRange(i32),
}Automatisk Display og Error
Derive implementerer automatisk både Display (ud fra dine meddelelser) og std::error::Error. Du behøver ikke skrive manuelle impl-blokke.
Indpakning af en kildefejl
#[from] genererer en From-impl, så operatoren ? kan konvertere en underliggende fejl til din type. #[source] markerer årsagen.
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),
}Brug sammen med ?
Takket være #[from] konverterer operatoren ? automatisk standardfejl til din AppError.
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)
}Kæden af årsager
Når du indpakker en fejl, eksponerer thiserror årsagen via Error::source, hvilket muliggør komplette fejlkæder til logning og fejlfinding.
Transparente fejl
#[error(transparent)] videresender både Display og kilden til den indpakkede fejl, hvilket er nyttigt for en variant, der blot videresender fejlen.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum WrapError {
#[error(transparent)]
Other(#[from] std::io::Error),
}Hvornår skal du bruge thiserror?
Vælg thiserror, når:
- Du skriver et bibliotek
- Kaldere skal kunne matche specifikke fejlvarianter
- Du ønsker en stabil, typet fejl-API
Til applikationer, hvor du blot vil føre fejl videre, er anyhow ofte enklere.
Matchning på varianter
Fordi fejlen er en rigtig enum, kan kaldere bruge match på den og reagere forskelligt på hver fejltype.
fn handle(err: AppError) {
match err {
AppError::Io(_) => println!("retry the file operation"),
AppError::Parse(_) => println!("ask the user to fix input"),
}
}Hurtigt tjek
Hvad genererer attributten #[from] i en thiserror-enum?
Opsummering
Du har lært craten thiserror:
#[derive(Error)]genererer Display- og Error-impl'er#[error("...")]definerer meddelelser med feltindsættelse#[from]muliggør?-konvertering fra kildefejltransparentvideresender til en indpakket fejl- Ideel til typede fejl-API'er i biblioteker
Lær Rust med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 39
- Lektioner
- 144
Ofte stillede spørgsmål
Er lektionen “thiserror” gratis?
Ja — alle 3 lektioner i læringssporet Lær at programmere i Rust, inklusive “thiserror”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “thiserror”?
Brugerdefinerede fejltyper Du øver dig i Lær at programmere i Rust med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Lær at programmere i Rust?
Der kræves ingen tidligere erfaring. Lær at programmere i Rust på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “thiserror”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Lær at programmere i Rust-lektion?
Ja. Alle Lær at programmere i Rust-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.