anyhow
是一個 Rust 庫,用于簡化錯誤處理。它可以捕獲和處理各種錯誤,包括標準庫錯誤、自定義錯誤等。要使用 anyhow
捕獲錯誤,你需要在代碼中使用 Result
類型,并在可能出錯的地方使用 ?
操作符。如果發生錯誤,?
操作符會立即將錯誤傳播給上層調用者,同時返回一個 Err
變體。
下面是一個簡單的示例,展示了如何使用 anyhow
捕獲和處理錯誤:
use anyhow::Result;
fn main() -> Result<()> {
let file_content = read_file("non_existent_file.txt")?;
println!("File content: {}", file_content);
let result = divide(10, 0)?;
println!("Result: {}", result);
Ok(())
}
fn read_file(file_name: &str) -> Result<String> {
std::fs::read_to_string(file_name).map_err(|err| anyhow::format_err!("Failed to read file {}: {}", file_name, err))
}
fn divide(a: u32, b: u32) -> Result<u32> {
if b == 0 {
Err(anyhow::format_err!("Division by zero"))
} else {
Ok(a / b)
}
}
在這個示例中,我們使用 ?
操作符捕獲了 read_file
和 divide
函數中可能發生的錯誤。如果發生錯誤,?
操作符會立即將錯誤傳播給 main
函數,并返回一個 Err
變體。這樣,我們可以輕松地處理錯誤并向用戶提供有關錯誤的詳細信息。