thiserror
Tipi di errore personalizzati
thiserror è una lezione Learn Rust Coding gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn Rust Coding, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn Rust Coding include 4 lezioni in totale.
Perché usare errori personalizzati?
Le librerie dovrebbero esporre tipi di errore significativi, così i chiamanti possono reagire a fallimenti specifici. Scriverli manualmente comporta molto codice ripetitivo. Il crate thiserror lo genera automaticamente.
Aggiungere thiserror
Lo aggiunga come dipendenza. È un crate di derive macro senza costi a runtime.
[dependencies]
thiserror = "1.0"Definire un enum di errore
Applichi il derive Error a un enum in cui ogni variante rappresenta un errore distinto. L'attributo #[error("...")] fornisce il messaggio Display.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum DataError {
#[error("item not found")]
NotFound,
#[error("invalid input: {0}")]
Invalid(String),
}Interpolare i campi
La stringa del messaggio può fare riferimento a campi con nome o posizionali, così il testo dell'errore contiene il contesto.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum ConfigError {
#[error("missing key: {key}")]
Missing { key: String },
#[error("value {0} out of range")]
OutOfRange(i32),
}Display ed Error automatici
Il derive implementa automaticamente sia Display (a partire dai messaggi) sia std::error::Error. Non servono blocchi impl manuali.
Avvolgere un errore di origine
#[from] genera un'implementazione di From, consentendo all'operatore ? di convertire un errore sottostante nel proprio tipo. #[source] indica la causa.
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),
}Usarlo con ?
Grazie a #[from], l'operatore ? converte automaticamente gli errori standard nel proprio 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)
}La catena source
Quando avvolge un errore, thiserror espone la causa tramite Error::source, consentendo di creare catene complete di errori per logging e debug.
Errori transparent
#[error(transparent)] inoltra sia Display sia source all'errore avvolto, una soluzione utile per una variante pass-through.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum WrapError {
#[error(transparent)]
Other(#[from] std::io::Error),
}Quando usare thiserror
Ricorra a thiserror quando:
- sta scrivendo una libreria
- chi chiama il codice deve poter usare
matchsu varianti di errore specifiche - desidera un'API di errore tipizzata e stabile
Per le applicazioni in cui desidera semplicemente propagare gli errori, anyhow è spesso più semplice.
Usare il match sulle varianti
Poiché l'errore è un vero enum, chi chiama il codice può usare match per reagire in modo diverso a ogni tipo di errore.
fn handle(err: AppError) {
match err {
AppError::Io(_) => println!("retry the file operation"),
AppError::Parse(_) => println!("ask the user to fix input"),
}
}Verifica rapida
Che cosa genera l'attributo #[from] in un enum di thiserror?
Riepilogo
Ha imparato a usare il crate thiserror:
#[derive(Error)]genera le implementazioni di Display ed Error#[error("...")]definisce i messaggi con interpolazione dei campi#[from]abilita la conversione con?dagli errori originetransparentinoltra a un errore racchiuso- È ideale per API di errore tipizzate nelle librerie
Impara Rust con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 39
- Lezioni
- 144
Domande Frequenti
La lezione «thiserror» è gratuita?
Sì — il testo completo di «thiserror» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn Rust Coding, passa a CoddyKit PRO. Il corso Learn Rust Coding include 4 lezioni in totale.
Cosa imparerò in «thiserror»?
Tipi di errore personalizzati Eserciti Learn Rust Coding con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn Rust Coding?
Non è richiesta alcuna esperienza precedente. Learn Rust Coding su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «thiserror»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn Rust Coding?
Sì. Ogni lezione Learn Rust Coding include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.