panic! 与不可恢复错误
学习目标
- 理解 panic 的使用场景
- 掌握
unwrap 和 expect
- 理解 RUST_BACKTRACE
核心概念
panic! 宏
fn main() {
let v = vec![1, 2, 3];
}
unwrap 和 expect
fn main() {
let x: Result<i32, &str> = Ok(42);
let val = x.unwrap();
let val = x.expect("should be ok");
let home = std::env::var("HOME")
.expect("HOME environment variable not set");
}
RUST_BACKTRACE
RUST_BACKTRACE=1 cargo run
RUST_BACKTRACE=full cargo run
abort vs unwind
[profile.release]
panic = "abort"
小结
| 场景 | 推荐方式 |
|---|
| 原型开发 | unwrap() |
| 测试代码 | unwrap(), expect() |
| 确定不会失败 | unwrap() |
| 可能失败 | match, if let, ? |
| 不可恢复 | panic!() |