Error handling 如何在自定义错误上使用“.kind()”?
我想知道如何对我的自定义错误进行模式匹配,对一些错误有一个特定的行为,对其他错误有一个通用的行为 我有以下自定义错误,使用Error handling 如何在自定义错误上使用“.kind()”?,error-handling,rust,Error Handling,Rust,我想知道如何对我的自定义错误进行模式匹配,对一些错误有一个特定的行为,对其他错误有一个通用的行为 我有以下自定义错误,使用thisrerror定义,因为它似乎是2020年7月针对自定义错误推荐的最新板条箱 #[derive(thiserror::Error, Debug)] pub enum MyError{ #[error("Error while building the query")] Builder(#[source] hyper::http::Er
thisrerror
定义,因为它似乎是2020年7月针对自定义错误推荐的最新板条箱
#[derive(thiserror::Error, Debug)]
pub enum MyError{
#[error("Error while building the query")]
Builder(#[source] hyper::http::Error),
#[error("Generic error")]
Fuck,
#[error("Not OK HTTP response code")]
NotOK,
#[error("Request error")]
Request(#[source] hyper::Error),
}
但是没有实现.kind()
。当我研究如何管理rust中的错误时,示例中经常出现类似的情况。我应该做什么样的咒语才能在我的项目中使用这个.kind()
方法或类似的方法
谢谢。我想你指的是
std::io::Error:kind
方法。这是专门针对IO错误的。因为它需要能够表示操作系统错误,io::Error
没有定义为枚举,我们无法匹配它。kind
方法允许我们获得一个ErrorKind
,以独立于平台的方式表示错误的一般原因
在普通的Rust库中完全不需要这种变通方法,因为所有的错误案例都可以简单地表示出来(作为
enum
的变体)。您需要做的就是直接匹配error
值我希望您指的是std::io::error:kind
方法。这是专门针对IO错误的。因为它需要能够表示操作系统错误,io::Error
没有定义为枚举,我们无法匹配它。kind
方法允许我们获得一个ErrorKind
,以独立于平台的方式表示错误的一般原因
在普通的Rust库中完全不需要这种变通方法,因为所有的错误案例都可以简单地表示出来(作为enum
的变体)。您只需直接匹配错误
值即可
pub async fn do_http_stuff() -> Result<Vec<u8>, MyError> {
...
}
match do_http_stuff().await {
Ok(data) => ...,
Err(error) => match error.kind() {
MyError::NotOK => {
println!("not ok");
},
_ => {
println!("{}", error.to_string());
},
},
},