fad*_*bee 11 error-handling rust
我的工作代码按以下方式返回错误:
fn foo() -> anyhow::Result<()> {
...
Err(anyhow::Error::new(
MyError::MyVariant {
actual: 0,
expected: 1
}
))
}
Run Code Online (Sandbox Code Playgroud)
有没有更简洁的方法来返回 的实例MyError
?
(省略anyhow::Error::new(
包装器会导致类型检查错误,因为MyError
不是 的实例anyhow::Error
。)
Nei*_*kos 19
您可以使用anyhow::bail!
宏。它完全考虑到了您的用例:
use anyhow::bail;
fn foo() -> anyhow::Result<()> {
if errored {
bail!(MyError::MyVariant { actual: 0, expected: 1 })
}
}
Run Code Online (Sandbox Code Playgroud)
正如 Filipe 在评论中正确指出的那样,如果您发现自己检查简单的条件并返回错误,您可以通过使用与butanyhow::ensure!
非常相似而不是恐慌来简化此步骤。assert!
return
use anyhow::ensure;
fn foo() -> anyhow::Result<()> {
ensure!(!errored, MyError::MyVariant { actual: 0, expected: 1 });
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9870 次 |
最近记录: |