错误处理
错误是软件中的常态,因此 Rust 提供了许多特性来处理某些事情出错的情况。在很多场景下,Rust 会要求你先承认错误发生的可能性,并在代码能够通过编译之前采取一些行动。这项要求会让程序更健壮,因为它确保你会在把代码部署到生产环境之前就发现错误,并妥善处理它们。
Rust 将错误分成两大类:可恢复的(recoverable)和不可恢复的(unrecoverable)错误。对于可恢复错误,例如“文件未找到”这样的错误,我们多半只想把问题报告给用户,然后重试这次操作。不可恢复错误则总是 bug 的征兆,比如试图访问数组末尾之外的位置,因此我们希望立刻停止程序。
大多数语言并不区分这两类错误,而是使用诸如异常(exception)之类的机制以相同方式处理它们。Rust 没有异常。相反,它使用 Result<T, E> 类型来处理可恢复错误,使用 panic! 宏在程序遇到不可恢复错误时停止执行。本章会先介绍如何调用 panic!,然后再讲如何返回 Result<T, E> 值。此外,我们还会探讨:在决定是尝试从错误中恢复,还是直接停止执行时,需要考虑哪些因素。