首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法在任意的`&dyn std::error::Error`特征对象上获取SNAFU的`.backtrace()`?

在任意的&dyn std::error::Error特征对象上获取SNAFU的.backtrace()是不可能的。SNAFU是一个Rust的错误处理库,它提供了一种简化错误处理的方式,但它并不支持在任意的&dyn std::error::Error对象上获取.backtrace()

.backtrace()方法是用于获取错误的回溯信息,它需要在错误对象上实现std::error::Error特征的backtrace()方法。然而,SNAFU并没有为其错误类型提供默认的回溯信息支持。

要在Rust中使用SNAFU并获取错误回溯信息,可以使用anyhow库。anyhow是一个与SNAFU类似的错误处理库,但它提供了对回溯信息的支持。你可以在anyhow的错误类型上调用.backtrace()方法来获取回溯信息。

以下是一个示例代码:

代码语言:txt
复制
use anyhow::Context;

fn main() -> Result<(), anyhow::Error> {
    let result = do_something()?;
    Ok(())
}

fn do_something() -> Result<(), anyhow::Error> {
    // 使用SNAFU创建一个错误
    let error: Result<(), snafu::Error> = Err(snafu::Error::Snafu);
    
    // 将SNAFU错误转换为anyhow错误,并添加回溯信息
    let error = error.context("An error occurred")?;
    
    // 在anyhow错误上获取回溯信息
    let backtrace = error.backtrace();
    
    // 打印回溯信息
    println!("{:?}", backtrace);
    
    Ok(())
}

在上面的示例中,我们使用anyhow库将SNAFU错误转换为anyhow错误,并添加了回溯信息。然后,我们可以在anyhow错误上调用.backtrace()方法来获取回溯信息,并进行相应的处理。

需要注意的是,SNAFU和anyhow都是非常强大和灵活的错误处理库,可以根据具体的需求选择使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Rust blog】细说Rust错误处理

()文档介绍中,尽管使用它不会导致编译警告,但新代码应该实现impl Display ,新impl可以省略,不用实现该方法, 要获取字符串形式错误描述,请使用to_string()。...backtrace()返回发生此错误堆栈追溯,因为标记unstable,Ruststable版本不被使用。...自定义Error需要impl std::fmt::Debugtrait,当然我们只需要在默认对象添加注解:#[derive(Debug)]即可 总结一下,自定义一个error需要实现如下几步: 手动实现...下面这是作用在单元测试Result代码: ......实际项目中,可以大量看到这种例子存在。 8. Option转换 我们知道,Rust中,需要使用到unwrap()方法对象有Result,Option两个对象

3.5K31
  • 【Rust每周一库】failure - 错误处理库

    原生Rust错误处理工具有std::error::Error(一般我们会看到Box形式),?操作符以及enum供我们自定义错误类型。这本身就可以作为一个专题来讨论。...其目标是取代基于std::eror::Error错误处理。...它提供了backtrace和cause方法去获取错误信息。也支持将错误包装在上下文(context)中。所有新错误类型都应该实现该trait。...使用Error和ErrorKind对:使用Error类型和ErrorKind枚举创建一个健壮错误类型。比较适合作为大型库公共API。 使用字符串 这是一个比较简便方法,推荐原型阶段使用。...操作符就可以变为Error类型 当你引入新依赖和新错误类型时,你可以直接抛出它们 要使用该模式,只要把返回值设定为Result use std::io; use std::io:

    1.3K40

    【Rust日报】2022-1-7 Rust 中为 RISC-V OS 实现自旋锁

    Rust 中为 RISC-V OS 实现自旋锁 自旋锁是最基本同步实现之一,也是实现操作系统时首先要考虑组件之一。...https://vmm.dev/en/rust/spinlock.md SNAFU 0.7 发布 SNAFU 是一个库,可以添加上下文同时轻松地将底层错误分配到特定于域错误中。...#[derive(Debug, Snafu)] pub struct Error(AnotherKindOfError); 1 月 4 日 SNAFU 0.7 发布,更新了包括:使用结构和枚举自定义错误类型...https://users.rust-lang.org/t/snafu-0-7-released/69766 将 Rust std 移植到 rustix Rustix 是一个具有多个后端系统调用包装库...有了这些,我们就有了 Linux 运行 Rust 程序所需所有东西。 https://blog.sunfishcode.online/port-std-to-rustix/

    48910

    时序数据库Influx-IOx源码学习四(Run命令执行)

    //根据用户命令行配置num_threads参数 //来选择创建一个多线程模型,还是current_thread模型 //后面有时间深入研究tokio时候再来分析有什么异同 let tokio_runtime...} } } }); influxdb_ioxd::main方法中,忽略一些不太需要重点关注,分别是初始化log管理、PanicsTracing、CancellationToken...本地文件,方便开发者调试运行在云时候文件变化 fn try_from(config: &Config) -> Result { match...::Error, }, #[snafu(display( "Specified {} for the object store, required configuration...//server_config里就是保存对象存储信息及线程配置 //如果num_worker_threads没有填写,默认就使用cpu数量 let app_server = Arc::new(AppServer

    69060

    【翻译】Rust生命周期常见误区

    拷贝我们处理字节时候是可行, 但当我们从 ByteIter 转向泛型切片迭代器用来迭代任意 &'a [T] 时候 我们也会想到将来可能它会被应用到那些拷贝/克隆代价很昂贵或根本不可能类型。...Trait impl Trait for Ref {} // 包含引用类型实现Trait 不管怎样,这都值得我们仔细研究,因为新手们经常在将一个使用trait对象函数重构成使用泛型函数...Rust编译器眼中是这样: use std::fmt::Display; fn dynamic_thread_print(t: Box...我们可选办法有: fn main() { // 转成trait object,变成不定长类型,编译错误 let identity: dyn Fn(&i32) -> &i32 = |x:...,或是一个所有权类型 既然 T: 'static 包含了所有权类型,那么意味着 T 可以在运行时动态分配 不必整个程序中都是有效 可以被安全地任意修改 可以在运行时动态析构 可以有不同长度生命周期

    1.6K20

    Rust特征对象(Trait Object)

    // x 和 y 类型 T 都实现了 `Draw` 特征,因为 Box 可以函数调用时隐式地被转换为特征对象 Box // 基于 x 值创建一个 Box 形式特征对象,该特征对象是通过 Box::new(x) 方式创建 draw2 函数参数是 &dyn Draw 形式特征对象,该特征对象是通过...&x 方式创建 dyn 关键字只用在特征对象类型声明创建时无需使用 dyn 有了特征对象,就实现了鸭子类型。...我们可以一个Vector中存放特征对象,从而实现不同类型存储容器。注意&dyn和Box都是在编译期已知大小。关于特征对象动态分发请看这里。...如果一个 trait 中定义所有方法都符合以下规则,则该 trait 是对象安全: 返回值不是 Self 没有泛型类型参数 Self 关键字是我们 trait 与方法实现别称,trait

    94440

    Rust写爬虫代码抓取精美的图片

    use reqwest::Error; // 此外,我们还需要使用Error类型来处理可能出现错误use std::io::BufReader; // 我们需要使用BufReader来处理读取文件时可能出现错误...; // 我们需要使用thread库来创建线程fn main() -> Result> { // 主函数,返回一个Result类型 let proxy_host...7、main函数中,我们设置了爬虫IP主机名和端口号。8、我们创建了一个Proxy对象并使用它创建了一个Client对象。9、我们获取了图片URL。...10、我们使用Client对象发送GET请求,获取响应。11、我们创建了一个BufReader对象来处理响应体。12、我们读取响应体中HTML代码,并将其存储一个String对象中。...这就是一个简单用Rust编写爬虫程序。注意,这个程序只是一个基本示例,实际爬虫程序可能需要处理更多细节,比如解析HTML代码、处理JavaScript代码、处理分页等等。

    49620

    Rust 和 Wasm 融合,使用 yew 构建 web 前端(5)- 构建 HTTP 请求、与外部服务器通信两种方法

    系列文章第四部分《获取 GraphQL 数据并解析 》中,我们已经与 GraphQL 服务后端进行了数据交互,获取 GraphQL 数据并解析。...其中,我们直接使用是 web-sys 库,需要获取当前 window 对象,通过 window 对象 Fetch API,对请求进行分发。...分发请求 构建 yew window 对象后,通过 window 对象 Fetch API,对请求进行分发。...返回结果类型为 JsValue,通过动态强制转换方法 dyn_into 将其转换为 web-sys Reponse 类型。...本文是基于前述文章基础之上,所以直接阅读仅能是概念了解。如果你希望对其践行,建议阅读系列文章。

    1.8K20
    领券