前言
之前我们借助讲解failure库,详细说明的Rust错误处理的哲学,这有助于我们理解今天的主题,anyhow和thiserror
Anyhow提供了一个anyhow::Error
trait(有点类似failure::Error)。而得益于std::error::Error所做的修改,它anyhow::Error
是与std::error::Error
兼容的。也就是说,对于自定义的错误类型,只需要实现std::error::Error即可。这对于程序的兼容性是一大利好,也因此failure库被日渐废弃。而thiserror正是方便大家为自定义的错误使用宏实现std::error::Error
而设计的。
依赖
[dependencies]anyhow = "1.0"thiserror = "1.0"
Anyhow用法
在需要返回Result的地方,使用Result<T, anyhow::Error>
或者等价的anyhow::Result<T>
,就可以利用?
抛出任何类型实现了std::error::Error
的错误
use anyhow::Result;
fn get_cluster_info() -> Result<ClusterMap> { let config =