Error handling 使用anyhow::error返回自定义错误类型的更简单的方法?
我的工作代码以以下方式返回错误:Error handling 使用anyhow::error返回自定义错误类型的更简单的方法?,error-handling,rust,Error Handling,Rust,我的工作代码以以下方式返回错误: fn foo() -> anyhow::Result<()> { ... Err(anyhow::Error::new( MyError::MyVariant { actual: 0, expected: 1 } )) } fn foo()->无论如何::结果{ ... Err(无论如何::Error::new( MyError::MyVa
fn foo() -> anyhow::Result<()> {
...
Err(anyhow::Error::new(
MyError::MyVariant {
actual: 0,
expected: 1
}
))
}
fn foo()->无论如何::结果{
...
Err(无论如何::Error::new(
MyError::MyVariant{
实际值:0,
预期:1
}
))
}
是否有更简洁的方法返回MyError
的实例
(省略anyhow::Error::new(
wrapper会导致类型检查错误,因为MyError
不是anyhow::Error
的实例)您可以使用宏。它正是您考虑的用例:
无论如何都要使用::bail;
fn foo()->无论如何::结果{
如果出错{
bail!(MyError::MyVariant{actual:0,预期为:1})
}
}
正如Filipe在注释中正确指出的那样,如果您发现自己正在检查简单条件并返回错误,您可以通过使用类似于assert!
但return
s而不是恐慌来简化此步骤
无论如何使用::确保;
fn foo()->无论如何::结果{
确保!(!errored,MyError::MyVariant{actual:0,应为:1});
}
对于检查条件和保释的特定情况,我会使用
无论如何::确保!(!errored,MyError::MyVariant{actual:0,expected:1})
@FilipeRodrigues你说得对!我添加了它。