thiserror
Egna feltyper
thiserror är en gratis lektion i Lär dig programmera i Rust på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lär dig programmera i Rust, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lär dig programmera i Rust innehåller totalt 4 lektioner.
Varför anpassade fel?
Bibliotek bör tillhandahålla meningsfulla feltyper så att anroparna kan reagera på specifika fel. Om ni skriver dessa för hand blir det mycket upprepande kod. Crate-paketet thiserror genererar den åt er.
Lägga till thiserror
Lägg till det som ett beroende. Det är ett crate-paket med derive-makron och ingen körtidskostnad.
[dependencies]
thiserror = "1.0"Definiera en feluppräkning
Använd derive för Error på en enum där varje variant representerar ett separat fel. Attributet #[error("...")] tillhandahåller Display-meddelandet.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum DataError {
#[error("item not found")]
NotFound,
#[error("invalid input: {0}")]
Invalid(String),
}Interpolera fält
Meddelandesträngen kan referera till namngivna eller positionsbaserade fält, så feltexten innehåller relevant sammanhang.
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 och Error
Derive implementerar automatiskt både Display (utifrån era meddelanden) och std::error::Error. Inga manuella impl-block behövs.
Omsluta ett källfel
#[from] genererar en From-implementation så att operatorn ? kan konvertera ett underliggande fel till er typ. #[source] markerar orsaken.
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),
}Använda det med ?
Tack vare #[from] konverterar operatorn ? automatiskt standardfel till 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ällkedjan
När ni omsluter ett fel exponerar thiserror orsaken via Error::source, vilket möjliggör fullständiga felkedjor för loggning och felsökning.
transparenta fel
#[error(transparent)] vidarebefordrar både Display och källan till det omslutna felet, vilket är användbart för en variant som bara skickar felet vidare.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum WrapError {
#[error(transparent)]
Other(#[from] std::io::Error),
}När ska thiserror användas?
Använd thiserror när:
- Ni skriver ett bibliotek
- Anroparna behöver matcha mot specifika felvarianter
- Ni vill ha ett stabilt, typat fel-API
För applikationer där ni bara vill skicka fel vidare är anyhow ofta enklare.
Matcha mot varianter
Eftersom felet är en riktig enum kan anroparna använda match för att reagera olika på varje typ av fel.
fn handle(err: AppError) {
match err {
AppError::Io(_) => println!("retry the file operation"),
AppError::Parse(_) => println!("ask the user to fix input"),
}
}Snabb kontroll
Vad genererar attributet #[from] i en thiserror-enum?
Sammanfattning
Ni har lärt er om crate-paketet thiserror:
#[derive(Error)]genererar Display- och Error-implementationer#[error("...")]definierar meddelanden med fältinterpolation#[from]möjliggör?-konvertering från källfeltransparentvidarebefordrar till ett omslutet fel- Idealiskt för typade fel-API:er i bibliotek
Lär dig Rust med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 39
- Lektioner
- 144
Vanliga frågor
Är lektionen ”thiserror” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lär dig programmera i Rust, inklusive ”thiserror”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lär dig programmera i Rust innehåller totalt 4 lektioner.
Vad lär jag mig i ”thiserror”?
Egna feltyper Ni övar på Lär dig programmera i Rust med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Lär dig programmera i Rust?
Du behöver inga förkunskaper. Utbildningen i Lär dig programmera i Rust på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”thiserror”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Lär dig programmera i Rust-lektionen?
Ja. Varje Lär dig programmera i Rust-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.