一个像Box<dyn std::error::Error>的类型可以构建于任意的特定具体错误,可以通过Display打印输出,并且可以通过动态地向下转换进行可选的暴露。anyhow[5]就是这种风格的最佳示例。 std::io::Error的这种情况比较有趣,是因为它想同时做到以上两点甚至更多。 这是std,所以封装和面向未来是最重要的。 来自操作系统的 ...
在Rust中,可以通过实现std::error::Errortrait来创建自定义错误类型。这允许我们定义自己的错误类型,并能够更具体地描述程序中可能发生的错误情况。 自定义错误类型通常包含一个或多个字段,这些字段可以包含有关错误的额外信息。通过实现Error trait,我们可以控制错误消息的格式,并且错误类型可以与其他期望Error trait的Ru...
; Ok(()) } #[derive(Debug)] enum UnExpectedError { Io(std::io::Error) } struct DesignError { ov: i32, nv: i32, } // 实现Error trait表明UnExpectedError是个错误类型 // 而错误类型通过Debug和Display来描述它们自己,所以UnExpectedError又实现了这两个trait。 impl std::error::...
custom_error.rs: usestd::error::Error;usestd::fmt;usestd::fmt::Display;// 自定义错误类型,包含文件路径信息#[derive(Debug)]pubstructMyError{ msg:String, source:String, }// 为自定义错误类型实现Error traitimplErrorforMyError{}// 实现Display trait,以便于打印错误信息implfmt::DisplayforMyError{...
usestd::error::Error;usestd::fmt;#[derive(Debug)]structMyError{ message:String, }implErrorforMyError {}implfmt::DisplayforMyError {fnfmt(&self, f: &mutfmt::Formatter) - > fmt::Result{write!(f,"{}",self.message) } }fnmain() - >Result< (), MyError > {letresult = do_somethin...
use std::io::Error;fnmain(){letpath="/tmp/dat";//文件路径matchread_file(path){//判断方法结果Ok(file)=>{println!("{}",file)}//OK 代表读取到文件内容,正确打印文件内容Err(e)=>{println!("{} {}",path,e)}//Err代表结果不存在,打印错误结果}}fnread_file(path:&str)->Result<String,...
而得益于std::error::Error所做的修改,它anyhow::Error是与std::error::Error兼容的。也就是说,对于自定义的错误类型,只需要实现std::error::Error即可。这对于程序的兼容性是一大利好,也因此failure库被日渐废弃。而thiserror正是方便大家为自定义的错误使用宏实现std::error::Error而设计的。
failure是rust-lang-nursery下的一个库,可以说是根正苗红的rust库了。其目标是取代基于std::eror::Error的错误处理。 failure有两个核心组件 Fail: 定制错误类型用的trait Error: 只要实现了Fail,就能转化为该结构体 Fail trait Fail trait被用来取代std::error::Error。它提供了backtrace和cause方法去获取错误的...
usestd::fmt; typeResult<T>=std::result::Result<T,DoubleError>; // 定义我们的错误类型。不管对我们的错误处理情况有多重要,这些都可能自定义。 // 现在我们能够按照底层工具的错误实现,写下我们的错误,或者两者之间的内容。 #[derive(Debug)]
接受几个 std::error::Error 相关实现的非 'static 生命周期 impl<Fd: AsFd> impl take ?Sized impl From<TryReserveError> for io::Error 兼容性说明 Rust 1.78 增加了其对 Windows 10 的最低要求,针对以下目标: x86_64-pc-windows-msvc i686-pc-windows-msvc ...