rust-错误处理
30.错误处理
Rust 语言也有错误这个概念,而且把错误分为两大类:可恢复 和 不可恢复,相当于其它语言的 异常 和 错误。
Name | 描述 |
---|---|
Recoverable | 可以被捕捉,相当于其它语言的异常 Exception |
UnRecoverable | 不可捕捉,会导致程序崩溃退出 |
panic!() 不可恢复错误
panic!()
程序立即退出,退出时调用者抛出退出原因。
一般情况下,当遇到不可恢复错误时,程序会自动调用 panic!()
。
1 | fn main() { |
Result 枚举和可恢复错误
枚举的定义如下:
1 | enum Result<T,E> { |
OK(T) T OK
时作为正常返回的值的数据类型。
Err(E) E Err
时作为错误返回的错误的类型。
1 | let f = File::open("abc.jpg"); //文件不存在,因此值为 Result.Err |
unwrap() 和 expect()
unwrap()
函数的原型如下
1 | unwrap(self):T |
unwrap
是 Result<T, E>的方法,在实例上调用此方法时,如果是 Ok 枚举值,就会返回 Ok 中的对象,如果是 Err 枚举值,在运行时会 panic,报错信息是 format!(“{}”, error)。其缺点是,如果在不同地方都使用 unwrap,运行时出现 panic 的时候。
1 | fn is_even(no:i32)->Result<bool,String> { |
函数 expect()
的原型如下
1 | expect(self,msg:&str):T |
expect
方法的作用和unwrap
类似,区别在于,expect
方法接受msg: &str
作为参数,它在运行时的panic
信息为format!("{}: {}", msg, error)
,使用expect
时,可以自定义报错信息,因此出现panic
时比较容易定位。
1 | let f = File::open("abc.txt").expect("无法打开该文件"); // 文件不存在 |
添加微信 | 公众号更多内容 |
---|---|
本博客所发布的内容,部分内容来源于网络,版权归原作者所有,如有侵权,请联系删除。转载请注明来自 面向加薪学习!