rust anyhow能捕獲嗎

小樊
81
2024-11-20 06:58:10
欄目: 編程語言

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_filedivide 函數(shù)中可能發(fā)生的錯(cuò)誤。如果發(fā)生錯(cuò)誤,? 操作符會(huì)立即將錯(cuò)誤傳播給 main 函數(shù),并返回一個(gè) Err 變體。這樣,我們可以輕松地處理錯(cuò)誤并向用戶提供有關(guān)錯(cuò)誤的詳細(xì)信息。

0