io::Error可以作为一个 vocabulary 类型,并且应该能够表示一些非系统错误。例如,Rust 的Path内部可以是 0 字节,对这样的Path在进行打开操作时,应该在进行系统调用之前就返回一个io::Error。 下面是std::io::Error的样子: pubstructError{ repr: Repr, }enumRepr{Os(i32),Simple(Er
一个像Box<dyn std::error::Error>的类型可以构建于任意的特定具体错误,可以通过Display打印输出,并且可以通过动态地向下转换进行可选的暴露。anyhow就是这种风格的最佳示例。 std::io::Error的这种情况比较有趣,是因为它想同时做到以上两点甚至更多。 这是std,所以封装和面向未来是最重要的。 来自操作系统的 I/O...
在这个示例中的read_file函数中,有两个错误类型,一个是我们在读取文件时的std::io::Error错误,另一个是通过serde_json解析json时可能发生的serde_json::Error。我们将错误类型写为 Box<dyn Error> dyn表示动态类型,及任何实现了Error trait的类型,及错误类型(所有的错误类型都应实现std::error::Error trait)...
处理尝试打开不存在的文件时发生的错误,是通过使用 error-chain crate 来实现的。error-chain crate 包含大量的模板代码,用于 Rust 中的错误处理。 foreign_links 代码块内的 Io(std::io::Error) 函数允许由 std::io::Error 所报错误信息到 error_chain! 所定义错误类型的自动转换,error_chain! 所定义错误类型...
usestd::fs::File;fnmain(){letgreeting_file_result=File::open("hello.txt");} File::open 的返回值是 Result<T, E>。泛型参数 T 会被 File::open 的实现放入成功返回值的类型 std::fs::File,这是一个文件句柄。错误返回值使用的 E 的类型是 std::io::Error。这些返回类型意味着 File::open 调...
实例use std::io; use std::io::Read; use std::fs::File; fn read_text_from_file(path: &str) -> Result<String, io::Error> { let mut f = File::open(path)?; let mut s = String::new(); f.read_to_string(&mut s)?; Ok(s) } fn main() { let str_file = read_text_fro...
std::io::Error类型表示I/O错误,比如未找到文件、权限被拒绝或到达文件结束。 std::num::ParseIntError类型表示发生字符串到整数解析操作所出现的错误。 std::option::NoneError类型表示打开空选项引起的错误。 std::result:: result 类型是一个泛型Result类型,可以用来表示任何错误。
代码演示:(演示打开文件,返回Result<File, Error> 类型的值,然后可以被main()中的match方式处理): 复制 use std::fs::File;use std::io::Error;fnopen_file(file_path:&str)->Result<File,Error>{letmut file=File::open(file_path)?;Ok(file)} ...
std::io::Error类型表示I/O错误,比如未找到文件、权限被拒绝或到达文件结束。 std::num::ParseIntError类型表示发生字符串到整数解析操作所出现的错误。 std::option::NoneError类型表示打开空选项引起的错误。 std::result:: result <T, E>类型是一个泛型Result类型,可以用来表示任何错误。
usestd::error::Error;usestd::fmt;usestd::fmt::Display;// 自定义错误类型,包含文件路径信息#[derive(Debug)]pubstructMyError{ msg:String, source:String, }// 为自定义错误类型实现Error traitimplErrorforMyError{}// 实现Display trait,以便于打印错误信息implfmt::DisplayforMyError{fnfmt(&self, f:...