cfanbo / cfanbo.github.io

1 stars 0 forks source link

在rust中实现自定义错误 | 学习笔记 #274

Open cfanbo opened 2 months ago

cfanbo commented 2 months ago

https://blog.haohtml.com/posts/custom-errors-in-rust/?#%E4%B8%8Ethiserror%E7%94%A8%E6%B3%95

上一篇 我们介绍了一些错误处理的最基本的用法,主要是指对 panic! 、unwrap、expect 和 ? 这些宏或函数的介绍。但这仅仅是一些最基本的处理方法,对于自定义错误这一块并没有做任何介绍。 实际开发中可能默认的错误类型,并无法满足我们的业务需求,这时一般需要通过定义自己的错误类型来实现。在rust中错误类型是通过 enum 枚举定义的,对此官方文档也做了一些简介,本文主要介绍一些业务开发过程中对错误的处理方案,当然主要是一些最基本的用法。 自定义 Error 在 Rust 中,自定义错误类型是一种常见的类型,特别是当你需要提供比标准错误类型更具体的错误信息时。Rust 中的错误处理是通过 Result 和 Error trait 来实现的。以下是如何实现一个自定义错误的示例: 定义一个错误枚举类型。 实现 std::fmt::Display 为自定义错误提供用户友好的错误信息。 实现 std::error::Error trait,这通常是通过派生 Error trait 来完成的。 下面是一个简单的示例: use std::fmt; use std::error::Error; // 定义一个自定义错误枚举 #[derive(Debug)] enum MyError { Io(std::io::Error), // 包装标准库的I/O错误 NotFound(String), // 一个未找到的错误,包含一个描述信息 InvalidInput(String), // 无效输入错误,包含一个描述信息 } // 为自定义错误实现 Display trait impl fmt::Display for MyError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { MyError::Io(ref err) => write!