2017-02-25 23:47:33 +08:00
|
|
|
|
# 错误处理
|
|
|
|
|
|
2017-03-23 22:37:22 +08:00
|
|
|
|
> [ch09-00-error-handling.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch09-00-error-handling.md)
|
2017-02-25 23:47:33 +08:00
|
|
|
|
> <br>
|
2018-01-20 15:59:20 +08:00
|
|
|
|
> commit a764530433720fe09ae2d97874c25341f8322573
|
2017-02-25 23:47:33 +08:00
|
|
|
|
|
2018-01-20 15:59:20 +08:00
|
|
|
|
Rust 对可靠性的执着也延伸到了错误处理。错误对于软件来说是不可避免的,所以 Rust 有很多特性来处理出现错误的情况。在很多情况下,Rust 要求你承认出错的可能性并在编译代码之前就采取行动。通过确保不会只有在将代码部署到生产环境之后才会发现错误来使得程序更可靠。
|
2017-02-25 23:47:33 +08:00
|
|
|
|
|
2017-08-21 08:33:53 +08:00
|
|
|
|
Rust 将错误组合成两个主要类别:**可恢复错误**(*recoverable*)和 **不可恢复错误**(*unrecoverable*)。可恢复错误通常代表向用户报告错误和重试操作是合理的情况,比如未找到文件。不可恢复错误通常是 bug 的同义词,比如尝试访问超过数组结尾的位置。
|
2017-02-25 23:47:33 +08:00
|
|
|
|
|
2017-08-21 08:33:53 +08:00
|
|
|
|
大部分语言并不区分这两类错误,并采用类似异常这样方式统一处理他们。Rust 并没有异常。相反,对于可恢复错误有 `Result<T, E>` 值,以及 `panic!`,它在遇到不可恢复错误时停止程序执行。这一章会首先介绍 `panic!` 调用,接着会讲到如何返回 `Result<T, E>`。最后,我们会讨论当决定是尝试从错误中恢复还是停止执行时需要顾及的权衡考虑。
|