总之:Return nested/wrapped 个错误
anyhow: Return nested/wrapped errors
use anyhow::Context;
fancy_module::run()
.await
.with_context(|| {
format!("An error has been found")
})?;
据我了解,当 run
return 出现错误时,我们 return “已发现错误”。但是这个消息并没有真正的意义。我也想 return 错误 运行 returns。类似于 format!("An error has been found {}", e)
。我如何获得 e
return 由 run
编辑?
我可以用多行代码来做到这一点。通过获取 run
的结果,然后使用 match
语句。有更好的方法吗?
From what I understand, when run returns an error, we return "An error has been found".
不正确! context
and with_context
围绕底层错误值创建一个包装器以引入额外的上下文,但原始错误保留在其中!
一旦你尝试 displaying the error,你会看到这样的东西:
Error: An error has been found
Caused by:
No such file or directory (os error 2)
(这也表明“已发现错误”对于创建额外的上下文来说是一个糟糕的词语选择。)
I would like to also return the error that run returns. Something like format!("An error has been found {}", e)
.
这在过去曾经是一个合理的设计决策,但当前的错误类型设计指南是反对在显示消息中包括源错误,除非该源错误在源错误链中也不可达。上下文方法 将 将错误放入源链中,因此不建议将该错误消息包含到顶级错误消息中。
How do I get e
returned by run
?
查看 chain
方法以遍历源错误链,从而使您能够窥视根本原因。尽管如此,无论如何,错误类型大多被设计为不透明的。如果您需要更好地自省错误的含义或更容易对错误进行模式匹配,请考虑使用结构错误类型而不是 anyhow::Error
(snafu
或 thiserror
可以帮助您构建它们)。
另请参阅:
use anyhow::Context;
fancy_module::run()
.await
.with_context(|| {
format!("An error has been found")
})?;
据我了解,当 run
return 出现错误时,我们 return “已发现错误”。但是这个消息并没有真正的意义。我也想 return 错误 运行 returns。类似于 format!("An error has been found {}", e)
。我如何获得 e
return 由 run
编辑?
我可以用多行代码来做到这一点。通过获取 run
的结果,然后使用 match
语句。有更好的方法吗?
From what I understand, when run returns an error, we return "An error has been found".
不正确! context
and with_context
围绕底层错误值创建一个包装器以引入额外的上下文,但原始错误保留在其中!
一旦你尝试 displaying the error,你会看到这样的东西:
Error: An error has been found
Caused by:
No such file or directory (os error 2)
(这也表明“已发现错误”对于创建额外的上下文来说是一个糟糕的词语选择。)
I would like to also return the error that run returns. Something like
format!("An error has been found {}", e)
.
这在过去曾经是一个合理的设计决策,但当前的错误类型设计指南是反对在显示消息中包括源错误,除非该源错误在源错误链中也不可达。上下文方法 将 将错误放入源链中,因此不建议将该错误消息包含到顶级错误消息中。
How do I get
e
returned byrun
?
查看 chain
方法以遍历源错误链,从而使您能够窥视根本原因。尽管如此,无论如何,错误类型大多被设计为不透明的。如果您需要更好地自省错误的含义或更容易对错误进行模式匹配,请考虑使用结构错误类型而不是 anyhow::Error
(snafu
或 thiserror
可以帮助您构建它们)。
另请参阅: