Rust 錯誤處理函式庫
thiserror vs snafu
thiserror
thiserror 是一個輕量級函式庫,提供衍生巨集使錯誤定義變得簡單。
特點:
- 簡潔的語法,低儀式感
- 適合建立錯誤類型函式庫和 API
- 通常用於建立供他人使用的函式庫
snafu
snafu 提供一個更完整的錯誤處理框架,著重於錯誤上下文和錯誤鏈。
特點:
- 以「上下文選擇器」模式鼓勵更精確地新增錯誤上下文
- 推薦「每個模組一個錯誤列舉」的模式
- 支援結構體和元組風格的錯誤變體
- 內建的回溯支援
比較
選擇建議:
- 選擇 thiserror 當你需要簡單明瞭的錯誤類型,特別是在函式庫中
- 選擇 snafu 當你需要更多結構化的錯誤處理,特別是在大型應用程式中
anyhow
anyhow 是一個與上述兩者不同的錯誤處理函式庫,它專注於應用程式而非函式庫。
特點:
- 設計用於應用程式的錯誤處理,而非函式庫
- 提供動態
anyhow::Error類型,可包含任何實作Error特徵的錯誤 - 簡化了跨越多個錯誤類型的處理
- 不需要定義自訂錯誤類型
anyhow vs thiserror/snafu:
- anyhow 專注於快速開發應用程式時的錯誤處理
- thiserror/snafu 專注於建立精確的錯誤類型層次結構
- anyhow 通常用於應用程式程式碼
- thiserror/snafu 通常用於函式庫程式碼
在實務中,anyhow 和 thiserror 經常一起使用:函式庫使用 thiserror 定義精確的錯誤類型,而應用程式使用 anyhow 處理各種錯誤來源。