在编写使用 Result
类型的代码时,您可能希望用户和开发人员有不同的行为。
- 在编写能够优雅地处理错误的应用程序时,最好使用
Result
。 - 在开发过程中,您可能希望“捕获”错误以查看是哪一行代码造成了错误,或者在创建
Err
值时获取堆栈跟踪。
如果您犯了一个独特的错误,则不难搜索它,但如果错误来自标准库,则该错误可能非常普遍。
例如,如果不手动将每个 file.read()?
更改为 file,就不可能知道哪个
.read
命令导致了意外的文件结束.read().unwrap()
是否有方便的方法从 Result
获取堆栈跟踪?
一个弱但可行的解决方案可能是制作一个用于读取的宏,read_in_release_unwrap_in_debug!(file, data)
...但这感觉很尴尬。
我有一个文件阅读器,有许多 read
调用,但有一个失败。我不确定是哪个。在运行时,我想将结果推送回调用者。对于调试,我希望失败的读取调用停止或以某种方式让我知道它的行号。
最佳答案
如果您使用 anyhow
你可以免费得到这个!问题是您需要每晚使用并启用环境变量:
RUST_BACKTRACE=1 cargo +nightly run
This is the tracking issue for stabilisation , 和 a PR to stabilise it .看起来对于它是否需要在稳定之前在 no_std 中工作或类似的事情存在一些分歧。
关于error-handling - 如何追溯错误结果的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42275777/