错误处理
rust对可靠性的执着延伸到了错误处理领域,错误分为两大类:可恢复错误与不可恢复错误,可恢复错误比如文件未找到,一般需要将它们报告给用户并再次尝试进行操作。而不可恢复错误往往就是bug的另一种说法,比如尝试访问超出数组结尾的位置等。
可能有两个不太恰当的比喻,不可恢复的错误在JS中比如试图调用不存在的方法(window.non_existent_fn())时会报错,而可恢复的错误比如在数组中获取超出长度的索引时得到undefined。
不可恢复错误与panic!
在JS中我们使用throw关键字抛出一个错误,rust也提供了一个特殊的panic! 宏。程序会在panic! 宏执行时打印出一段错误提示信息,立即清理内存占用,然后退出程序。
foo();
fn foo() {
panic!(123); // 主动抛出一个错误,
}
程序报错时也会触发panic:
// 程序出错
let arr = vec![1,2,3];
arr[99]; // 报错,超出数组范围
我们可以选择在报错后不进行任何清理内存占用,程序所使用过的内存只能由操作系统来进行回收,在Cargo.toml中配置:
[profile.dev] // 开发环境下直接结束程序
panic = "abort"
使用运行标识查看详细报错信息:
RUST_BACKTRACE=0 cargo run # 关闭跟踪信息
RUST_BACKTRACE=1 cargo run # 显示跟踪信息信息
RUST_BACKTRACE=full cargo run # 详细跟踪信息
本节先介绍到这里,由于可恢复的错误内容有点多,两节放到一起的话五分钟就看不完了^_^。