error-handling - 使用 anyhow::Error 返回自定义错误类型的更简单方法?
问题描述
我有工作代码,它以下列方式返回错误:
fn foo() -> anyhow::Result<()> {
...
Err(anyhow::Error::new(
MyError::MyVariant {
actual: 0,
expected: 1
}
))
}
有没有更简洁的方法来返回 的实例MyError
?
(省略anyhow::Error::new(
包装器会导致类型检查错误,因为MyError
不是anyhow::Error
.)
解决方案
您可以使用anyhow::bail!
宏。它完全考虑了您的用例:
use anyhow::bail;
fn foo() -> anyhow::Result<()> {
if errored {
bail!(MyError::MyVariant { actual: 0, expected: 1 })
}
}
正如 Filipe 在评论中正确指出的那样,如果您发现自己检查了简单的条件并返回错误,您可以通过使用与but sanyhow::ensure!
非常相似而不是恐慌来简化此步骤。assert!
return
use anyhow::ensure;
fn foo() -> anyhow::Result<()> {
ensure!(!errored, MyError::MyVariant { actual: 0, expected: 1 });
}
推荐阅读
- php - 警告:session_start():找不到保存处理程序's' - 会话启动失败
- c# - Unity3d 错误 CS2011:打开响应文件时出错(临时文件夹不正确)
- angular - 如何在元素上设置活动类
- angular - ng build --base-href="/.../" --deploy-url="/.../" css 背景图片不工作
- r - 如何在 RStudio 中加载麻烦的 r 包依赖项?
- r - 使用 R 通过 url 批量下载时分配用作文件名链接的字符串
- web-applications - 我想要一些关于如何使 Web 应用程序自主的材料或资源
- oracle - 使用 ResultSet.TYPE_SCROLL_INSENSITIVE ,ResultSet.CONCUR_UPDATABLE 是否影响性能
- html - Google 搜索将网页名称显示为主页(当前)而不是页面名称
- java - 使用另一个列表对列表进行排序。根据第二个列表交换项目