io::Error可以作为一个 vocabulary 类型,并且应该能够表示一些非系统错误。例如,Rust 的Path内部可以是 0 字节,对这样的Path在进行打开操作时,应该在进行系统调用之前就返回一个io::Error。 下面是std::io::Error的样子: pubstructError{ repr: Repr, }enumRepr{Os(i32),Simple(ErrorKind),Custom(Box<Custom>)...
use std::fs::File;use std::io::Read;fn read_file(path: &str) -> Result<String, std::io::Error> { let mut file = File::open(path)?; let mut contents = String::new(); file.read_to_string(&mut contents)?; Ok(contents)}1.2.3.4.5.6.7.8.9.read_file函数读取...
io::Error可以作为一个 vocabulary 类型,并且应该能够表示一些非系统错误。例如,Rust 的Path内部可以是 0 字节,对这样的Path在进行打开操作时,应该在进行系统调用之前就返回一个io::Error。 下面是std::io::Error的样子: pubstructError{repr:Repr,}enumRepr{Os(i32),Simple(ErrorKind),Custom(Box<Custom>),}s...
fnread_file_to_string(file_path:String)->Result<String, io::Error>{letmutfile= File::open(file_path)?;letmutcontents= String::new(); file.read_to_string(&mutcontents)?;Ok(contents) } 上面的代码,当文件不存在的时候,也可以很好的返回异常信息。 调用代码: letr=read_file_to_string(r"d...
在上述示例中,我们定义了一个自定义的错误类型MyError,其中包含两个错误变体SomeError和AnotherError。在函数do_something中,我们可以通过Err关键字返回自定义的错误类型。 2、标准库错误类型 Rust 的标准库提供了一系列错误类型,例如io::Error、parse::Error等。这些错误类型用于表示标准库中的常见错误场景。
在这个示例中的read_file函数中,有两个错误类型,一个是我们在读取文件时的std::io::Error错误,另一个是通过serde_json解析json时可能发生的serde_json::Error。我们将错误类型写为 Box<dyn Error> dyn表示动态类型,及任何实现了Error trait的类型,及错误类型(所有的错误类型都应实现std::error::Error trait)...
io::Error是一个结构体,它由一个kind()方法签名是pub fn kind(&self) -> ErrorKind,返回描述错误原因枚举ErrorKind。 ErrorKind的成员是各种io错误原因,比如NotFound,PermissionDenied… 因此如果函数返回io::Result,失败时返回的是io::Error时,就可以调用kind方法,进一步匹配不同的错误原因进行不同处理。
usestd::io; usestd::io::Read; usestd::fs::File; fnread_text_from_file(path:&str)->Result<String,io::Error>{ letmutf=File::open(path)?; letmuts=String::new(); f.read_to_string(&muts)?; Ok(s) } fnmain(){ letstr_file=read_text_from_file("hello.txt"); ...
std::io::Error类型表示I/O错误,比如未找到文件、权限被拒绝或到达文件结束。 std::num::ParseIntError类型表示发生字符串到整数解析操作所出现的错误。 std::option::NoneError类型表示打开空选项引起的错误。 std::result:: result 类型是一个泛型Result类型,可以用来表示任何错误。
由此可见,该函数将 io::Error 的错误往上进行传播,该函数的调用者最终会对 Result<String,io::Error> 进行再处理,至于怎么处理就是调用者的事,如果是错误,它可以选择继续向上传播错误,也可以直接 panic,亦或将具体的错误原因包装后写入 socket 中呈现给终端用户。