thiserror
Tipos de error personalizados
thiserror es una lección gratuita de Learn Rust Coding en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn Rust Coding, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn Rust Coding incluye 4 lecciones en total.
¿Por qué usar errores personalizados?
Las bibliotecas deben exponer tipos de error significativos para que quien las use pueda reaccionar a fallos específicos. Escribirlos manualmente implica mucho código repetitivo. El crate thiserror lo genera por usted.
Añadir thiserror
Añádalo como dependencia. Es un crate de macros derivadas que no tiene ningún coste en tiempo de ejecución.
[dependencies]
thiserror = "1.0"Definir un enum de error
Derive Error en un enum donde cada variante represente un fallo distinto. El atributo #[error("...")] proporciona el mensaje de Display.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum DataError {
#[error("item not found")]
NotFound,
#[error("invalid input: {0}")]
Invalid(String),
}Interpolar campos
La cadena del mensaje puede hacer referencia a campos con nombre o posicionales, por lo que el texto del error incluye contexto.
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 y Error automáticos
La derivación implementa automáticamente tanto Display (a partir de sus mensajes) como std::error::Error. No se necesitan bloques impl manuales.
Envolver un error de origen
#[from] genera una implementación de From para que el operador ? pueda convertir un error subyacente a su tipo. #[source] marca 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 ?
Gracias a #[from], el operador ? convierte automáticamente los errores estándar a su 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 cadena de origen
Al envolver un error, thiserror expone la causa mediante Error::source, lo que permite crear cadenas completas de errores para el registro y la depuración.
Errores transparentes
#[error(transparent)] reenvía tanto Display como source al error envuelto, lo que resulta útil para una variante de paso directo.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum WrapError {
#[error(transparent)]
Other(#[from] std::io::Error),
}Cuándo usar thiserror
Use thiserror cuando:
- Esté escribiendo una biblioteca
- Quien use la biblioteca necesite hacer coincidencias sobre variantes de error específicas
- Quiera una API de errores tipada y estable
En aplicaciones en las que solo quiera propagar los errores, anyhow suele ser más sencillo.
Coincidencias sobre variantes
Como el error es un enum real, quien use la biblioteca puede hacer un match sobre él para reaccionar de forma distinta a cada tipo de fallo.
fn handle(err: AppError) {
match err {
AppError::Io(_) => println!("retry the file operation"),
AppError::Parse(_) => println!("ask the user to fix input"),
}
}Comprobación rápida
¿Qué genera el atributo #[from] en un enum de thiserror?
Resumen
Ha aprendido el crate thiserror:
#[derive(Error)]genera las implementaciones de Display y Error#[error("...")]define mensajes con interpolación de campos#[from]permite que?convierta errores de origentransparentreenvía al error envuelto- Es ideal para APIs de errores tipados en bibliotecas
Preguntas frecuentes
¿La lección «thiserror» es gratis?
Sí — el texto completo de «thiserror» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn Rust Coding, actualiza a CoddyKit PRO. El curso de Learn Rust Coding incluye 4 lecciones en total.
¿Qué aprenderé en «thiserror»?
Tipos de error personalizados Practicas Learn Rust Coding con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Learn Rust Coding?
No se requiere experiencia previa. Learn Rust Coding en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «thiserror»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Learn Rust Coding?
Sí. Cada lección de Learn Rust Coding incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.