Rust anyhow:灵活的错误处理
使用anyhow简化应用程序级错误处理与上下文传递 · 难度:入门 · +15XP
anyhow简介
anyhow提供了一个灵活的错误类型anyhow::Error,能够包装任何实现了std::error::Error的类型,并支持添加上下文信息。
基本用法
use anyhow::{Result, Context};
fn read_config(path: &str) -> Result<String> {
std::fs::read_to_string(path)
.with_context(|| format!("读取配置文件失败: {}", path))
}
fn main() -> Result<()> {
let config = read_config("config.toml")?;
println!("配置内容: {}", config);
Ok(())
}
错误链与上下文
use anyhow::{bail, ensure, Result};
fn validate_number(n: i32) -> Result<()> {
ensure!(n >= 0, "数字必须非负");
if n > 100 {
bail!("数字太大: {}", n);
}
Ok(())
}
| 宏/函数 | 用途 |
|---|---|
| bail! | 提前返回错误 |
| ensure! | 条件检查 |
| Context::context | 添加上下文 |
练习提示:编写一个函数,读取两个文件并合并内容,使用anyhow处理可能的错误。