使用 anyhow 库中的 Context
和 Error
类型进行嵌套和返回。
例如,在以下代码中,我们使用 anyhow::Context
类型进行错误包装和嵌套:
use anyhow::Result;
use std::fs::File;
use std::io::Read;
fn read_file(path: &str) -> Result {
let mut file = File::open(path)
.context(format!("Unable to open file: {}", path))?;
let mut contents = String::new();
file.read_to_string(&mut contents)
.context(format!("Unable to read file: {}", path))?;
Ok(contents)
}
在以上示例中,我们使用了 context()
方法来嵌套错误并包装返回值。最终的 Result
类型描述了整个错误链,包括原始错误和所有上下文信息。
可以使用 unwrap()
或 unwrap_err()
方法来获取有关特定错误的信息。
例如,在以下示例中,我们使用 unwrap_err()
方法来获取发生的错误和相关信息:
fn main() {
match read_file("nonexistent_file.txt") {
Ok(contents) => println!("Contents of file: {}", contents),
Err(error) => eprintln!("Error: {:?}", error.unwrap_err()),
}
}