gpt4 book ai didi

error-handling - 如何在我的自定义错误上使用 `.kind()`?

转载 作者:行者123 更新时间:2023-12-03 08:09:13 25 4
gpt4 key购买 nike

我想知道如何对我的自定义错误进行一些模式匹配,以针对一些错误具有特定的行为,而对于其他错误具有通用行为。
我有以下自定义错误,使用thiserror定义,因为它似乎是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),
}
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());
},
},
},
但是 .kind()没有实现。当我研究如何处理 rust 错误时,示例中经常出现这种情况。我应该怎么做才能在项目中使用 .kind()方法或等效方法?
谢谢。

最佳答案

我希望您指的是std::io::Error:kind方法。它专门用于IO错误。因为它必须能够表示操作系统错误,所以io::Error未被定义为枚举,因此我们无法对其进行匹配。 kind方法允许我们以与平台无关的方式获取代表错误的一般原因的ErrorKind
在普通的Rust库中,完全不需要这种解决方法,因为所有错误情况都可以简单地表示(作为enum的变体)。您需要做的就是直接匹配error

关于error-handling - 如何在我的自定义错误上使用 `.kind()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62846831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com