thiserror
Jenis ralat tersuai
thiserror ialah pelajaran Belajar Pengaturcaraan Rust percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Belajar Pengaturcaraan Rust, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Belajar Pengaturcaraan Rust merangkumi sejumlah 4 pelajaran.
Mengapa Ralat Tersuai?
Pustaka sepatutnya mendedahkan jenis ralat yang bermakna supaya pemanggil boleh bertindak balas terhadap kegagalan tertentu. Menulisnya secara manual memerlukan banyak kod berulang. Krat thiserror menjana kod tersebut untuk Anda.
Menambah thiserror
Tambahkan sebagai kebergantungan. Ia ialah krat makro derive tanpa kos semasa masa jalan.
[dependencies]
thiserror = "1.0"Mentakrifkan Enum Ralat
Gunakan derive Error pada enum yang setiap variannya mewakili kegagalan yang berbeza. Atribut #[error("...")] menyediakan mesej Display.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum DataError {
#[error("item not found")]
NotFound,
#[error("invalid input: {0}")]
Invalid(String),
}Menginterpolasikan Medan
Rentetan mesej boleh merujuk medan bernama atau berposisi, supaya teks ralat membawa konteks.
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 dan Error Automatik
Derive tersebut melaksanakan Display (daripada mesej Anda) dan std::error::Error secara automatik. Tiada blok impl manual diperlukan.
Membungkus Ralat Sumber
#[from] menjana impl From supaya operator ? boleh menukar ralat asas kepada jenis Anda. #[source] menandakan puncanya.
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),
}Menggunakannya dengan ?
Dengan adanya #[from], operator ? menukar ralat piawai kepada AppError secara automatik.
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)
}Rantaian source
Apabila Anda membungkus ralat, thiserror mendedahkan puncanya melalui Error::source, sekali gus membolehkan rantaian ralat lengkap untuk pengelogan dan penyahpepijatan.
Ralat transparent
#[error(transparent)] meneruskan Display dan source kepada ralat yang dibungkus, berguna untuk varian laluan terus.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum WrapError {
#[error(transparent)]
Other(#[from] std::io::Error),
}Bila Hendak Menggunakan thiserror
Gunakan thiserror apabila:
- Anda sedang menulis pustaka
- Pemanggil perlu menggunakan match pada varian ralat tertentu
- Anda mahukan API ralat berjenis yang stabil
Untuk aplikasi yang hanya perlu menyebarkan ralat ke atas, anyhow selalunya lebih mudah.
Memadankan Varian
Oleh sebab ralat itu ialah enum sebenar, pemanggil boleh menggunakan match padanya untuk bertindak secara berbeza terhadap setiap jenis kegagalan.
fn handle(err: AppError) {
match err {
AppError::Io(_) => println!("retry the file operation"),
AppError::Parse(_) => println!("ask the user to fix input"),
}
}Semakan Pantas
Apakah yang dijana oleh atribut #[from] dalam enum thiserror?
Ringkasan
Anda telah mempelajari krat thiserror:
#[derive(Error)]menjana impl Display dan Error#[error("...")]mentakrifkan mesej dengan interpolasi medan#[from]membolehkan penukaran?daripada ralat sumbertransparentmeneruskan kepada ralat yang dibungkus- Sesuai untuk API ralat berjenis dalam pustaka
Pelajari Rust dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 39
- Pelajaran
- 144
Soalan Lazim
Adakah pelajaran “thiserror” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Belajar Pengaturcaraan Rust, termasuk “thiserror”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Belajar Pengaturcaraan Rust merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “thiserror”?
Jenis ralat tersuai Anda berlatih Belajar Pengaturcaraan Rust menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Belajar Pengaturcaraan Rust?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Belajar Pengaturcaraan Rust di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “thiserror” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Belajar Pengaturcaraan Rust ini?
Ya. Setiap pelajaran Belajar Pengaturcaraan Rust menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.