thiserror
Mukautetut virhetyypit.
thiserror on ilmainen Rust-ohjelmoinnin perusteet-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Rust-ohjelmoinnin perusteet-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Rust-ohjelmoinnin perusteet-kurssilla on yhteensä 4 oppituntia.
Miksi mukautettuja virheitä?
Kirjastojen kannattaa tarjota merkityksellisiä virhetyyppejä, jotta kutsuva koodi voi reagoida tiettyihin virhetilanteisiin. Niiden kirjoittaminen käsin tarkoittaa paljon toisteista koodia. thiserror-cratella voitte luoda sen automaattisesti.
thiserrorin lisääminen
Lisätkää se riippuvuudeksi. Se on derive-makroja tarjoava crate, jonka käytöstä ei aiheudu ajonaikaisia kustannuksia.
[dependencies]
thiserror = "1.0"Virheen määrittäminen enumina
Derivoikaa Error enumille, jossa jokainen variantti edustaa erillistä virhetilannetta. #[error("...")]-attribuutti määrittää Display-viestin.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum DataError {
#[error("item not found")]
NotFound,
#[error("invalid input: {0}")]
Invalid(String),
}Kenttien interpolointi
Viestimerkkijonossa voidaan viitata nimettyihin tai järjestysnumeroilla määritettyihin kenttiin, joten virheteksti voi sisältää tilanteen kannalta olennaista tietoa.
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 ja Error automaattisesti
Derivointi toteuttaa automaattisesti sekä Display-traitin (viestienne perusteella) että std::error::Error-traitin. Manuaalisia impl-lohkoja ei tarvita.
Lähdevirheen kääriminen
#[from] luo From-impl-toteutuksen, jonka ansiosta ?-operaattori voi muuntaa taustalla olevan virheen omaksi virhetyypiksenne. #[source] merkitsee virheen aiheuttajan.
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),
}Käyttö ?-operaattorin kanssa
#[from]-attribuutin ansiosta ?-operaattori muuntaa standardivirheet automaattisesti AppError-tyypiksi.
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)
}source-ketju
Kun käärätte virheen, thiserror tarjoaa aiheuttajan Error::source-funktion kautta, mikä mahdollistaa täydelliset virheketjut lokitusta ja vianmääritystä varten.
Transparent-virheet
#[error(transparent)] välittää sekä Display-esityksen että lähdevirheen kääritylle virheelle. Tämä on hyödyllistä läpivientivariantissa.
use thiserror::Error;
#[derive(Error, Debug)]
pub enum WrapError {
#[error(transparent)]
Other(#[from] std::io::Error),
}Milloin thiserroria kannattaa käyttää
Valitkaa thiserror, kun:
- kirjoitatte kirjastoa
- kutsujien on voitava tehdä match tiettyihin virhevariantteihin
- haluatte vakaan ja tyypitetyn virhe-API:n
Sovelluksissa, joissa haluatte vain välittää virheet eteenpäin, anyhow on usein yksinkertaisempi vaihtoehto.
Varianttien käsittely matchilla
Koska virhe on todellinen enum, kutsuva koodi voi käyttää siihen match-rakennetta ja reagoida eri tavoin kuhunkin virhetyyppiin.
fn handle(err: AppError) {
match err {
AppError::Io(_) => println!("retry the file operation"),
AppError::Parse(_) => println!("ask the user to fix input"),
}
}Pikatarkistus
Mitä #[from]-attribuutti luo thiserror-enumissa?
Kertaus
Opitte thiserror-craten käytön:
#[derive(Error)]luo Display- ja Error-impl-toteutukset#[error("...")]määrittää viestit kenttien interpoloinnilla#[from]mahdollistaa lähdevirheiden muuntamisen?-operaattorillatransparentvälittää käsittelyn kääritylle virheelle- Sopii erityisesti tyypitettyihin kirjastojen virhe-API:eihin
Opi Rust tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 39
- Oppitunnit
- 144
Usein kysytyt kysymykset
Onko oppitunti ”thiserror” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Rust-ohjelmoinnin perusteet-oppimispolun 3 oppituntia, myös oppitunnin “thiserror”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Rust-ohjelmoinnin perusteet-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”thiserror”?
Mukautetut virhetyypit. Harjoittelet Rust-ohjelmoinnin perusteet-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Rust-ohjelmoinnin perusteet-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Rust-ohjelmoinnin perusteet-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”thiserror”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Rust-ohjelmoinnin perusteet-oppitunnilla?
Kyllä. Jokainen Rust-ohjelmoinnin perusteet-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.