溫馨提示×

rust anyhow如何處理錯誤

小樊
81
2024-11-20 07:04:10
欄目: 編程語言

anyhow 是一個 Rust 庫,用于簡化錯誤處理。它提供了一個 Result 類型,可以表示成功或失敗的結果。當你在代碼中使用 anyhow 時,你可以使用 ? 運算符來傳播錯誤。如果 ResultErr,則會立即返回錯誤;如果是 Ok,則會解包值并繼續(xù)執(zhí)行。

下面是一個簡單的示例,展示了如何使用 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::anyhow!("Failed to read file {}: {}", file_name, err)
    })
}

fn divide(a: i32, b: i32) -> Result<i32> {
    if b == 0 {
        Err(anyhow::anyhow!("Division by zero"))
    } else {
        Ok(a / b)
    }
}

在這個示例中,我們定義了三個函數(shù):main、read_filedivide。main 函數(shù)調用 read_filedivide 函數(shù),并使用 ? 運算符處理錯誤。如果發(fā)生錯誤,anyhow 會生成一個描述性的錯誤消息,并立即返回。

read_file 函數(shù)嘗試讀取一個文件的內(nèi)容。如果文件不存在或無法讀取,它會使用 map_err 將標準錯誤轉換為 anyhow::Error 類型,并添加一個描述性消息。

divide 函數(shù)執(zhí)行除法操作。如果除數(shù)為零,它會返回一個錯誤,否則返回結果。

0