anyhow
是一個(gè) Rust 庫,用于簡(jiǎn)化錯(cuò)誤處理。它可以捕獲和處理各種錯(cuò)誤,包括標(biāo)準(zhǔn)庫錯(cuò)誤、自定義錯(cuò)誤等。要使用 anyhow
捕獲錯(cuò)誤,你需要在代碼中使用 Result
類型,并在可能出錯(cuò)的地方使用 ?
操作符。如果發(fā)生錯(cuò)誤,?
操作符會(huì)立即將錯(cuò)誤傳播給上層調(diào)用者,同時(shí)返回一個(gè) Err
變體。
下面是一個(gè)簡(jiǎn)單的示例,展示了如何使用 anyhow
捕獲和處理錯(cuò)誤:
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)
}
}
在這個(gè)示例中,我們使用 ?
操作符捕獲了 read_file
和 divide
函數(shù)中可能發(fā)生的錯(cuò)誤。如果發(fā)生錯(cuò)誤,?
操作符會(huì)立即將錯(cuò)誤傳播給 main
函數(shù),并返回一個(gè) Err
變體。這樣,我們可以輕松地處理錯(cuò)誤并向用戶提供有關(guān)錯(cuò)誤的詳細(xì)信息。