Özet - İleri hata yönetimi
- Rust kursu
- Orta seviye
- Ders 70/115
- 5 dk
thiserror ve From'u birleştirerek bir config okuyucu hatası yazarsın.
İleri hata yönetimi özeti
Hata türleri Debug + Display + Error uygular. Kütüphanede somut enum'lar (thiserror), uygulamada esnek tür (anyhow ya da Box<dyn Error>) kullanılır. impl From, ? ile otomatik dönüşüm sağlar. Bağlam (with_context ya da map_err) hatayı anlaşılır kılar. source(), bir hatanın altındaki nedeni verir ve zincir halinde dolaşılabilir.
Hata zinciri
source uygulayan bir hata türü, nedeni kaybetmeden üst düzey bir mesaj verebilir:
#[derive(Debug)]
struct UstHata {
kaynak: ParseIntError,
}
impl fmt::Display for UstHata {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "yapılandırma yüklenemedi")
}
}
impl Error for UstHata {
fn source(&self) -> Option<&(dyn Error + 'static)> {
Some(&self.kaynak)
}
}Zincir while let Some(k) = s { ..; s = k.source(); } ile dolaşılır.
Uygulama Zinciri yazdır
Yukarıdaki UstHata türünü yaz. "x".parse::<i32>().unwrap_err() ile bir örnek oluştur; önce hatayı yazdır, sonra source zincirini neden: MESAJ biçiminde dolaş.
Başlangıç kodu
use std::error::Error;
use std::fmt;
use std::num::ParseIntError;
fn main() {
// buraya yaz
}Örnek çözüm
use std::error::Error;
use std::fmt;
use std::num::ParseIntError;
#[derive(Debug)]
struct UstHata {
kaynak: ParseIntError,
}
impl fmt::Display for UstHata {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "yapılandırma yüklenemedi")
}
}
impl Error for UstHata {
fn source(&self) -> Option<&(dyn Error + 'static)> {
Some(&self.kaynak)
}
}
fn main() {
let e = UstHata { kaynak: "x".parse::<i32>().unwrap_err() };
println!("{}", e);
let mut s = e.source();
while let Some(k) = s {
println!(" neden: {}", k);
s = k.source();
}
}Beklenen çıktı
yapılandırma yüklenemedi neden: invalid digit found in string
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>Error::source</code> varsayılan olarak ne döndürür?
- Display mesajını
- Panic verir
- None Doğru cevap
- Hatanın kendisini
Açıklama: Alt nedeni olan hata türleri source'u ezerek Some(&iç_hata) döndürür.
2 Nedeni ver
impl Error for UstHata {
fn ____(&self) -> Option<&(dyn Error + 'static)> {
Some(&self.kaynak)
}
}
impl Error for UstHata {
fn source(&self) -> Option<&(dyn Error + 'static)> {
Some(&self.kaynak)
}
}
Açıklama: source alttaki hatayı döndürür.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
impl Error |
Hata sözleşmesi |
impl From<E> |
? ile dönüşüm |
with_context |
Bağlam ekler |
source() |
Alt neden |