错误处理 Rust有2中不同的错误处理机制。
- Panic :不可恢复错误。永远不应该发送的错误。
- Result :可恢复错误。通常是由外部导致。
- 越界访问数组
- 整数被零除
- 在值为None的Option上调用.unwrap()
- 断言失败
- 调用panic!主动发起
- 展开栈, 默认选项
- 终止进程
Run时,设置RUST_BACKTRACE=1, 会保存panic时的栈信息。沿着调用顺序反向展开清理,最后退出线程。如果是主线程就退出整个进程。
终止进程
2种情况会终止进程
- 编译时加了-C panic=abort, 遇到第一个panic就会终止进程。
- 如果panic触发展开栈,清理期间.drop()方法触发了第二个panic,Rust会停止展开,终止整个进程。
Result
处理错误通常使用match表达式。
错误处理的其他方法:
-
?
用于向上传播错误。如果返回成功,会取到成功的结果,如果返回失败,则终止函数,并返回失败。所以有Result返回值的函数中才能使用?
。
- unwarp()也是Result的方法。和
?
差不多,区别是在错误时,代码会panic。
- 【Rust|【Rust】错误处理】expect() 在main中处理Result错误使用expect(), 不使用?,不能再向外传播了。 同unwarp(), 错误时会panic。区别在于except可提供自定义错误信息。
推荐阅读
- Rust|Rust 五分钟了解,三十分种入门
- 开发语言|眼部化妆品、护肤品BCOP眼刺激性测试
- 21天挑战python进阶|python(爬虫篇)——Xpath提取网页数据
- Python基础语法|Python面向对象三大特征
- java|你不知道的 java 对象序列化的秘密
- android|Kotlin Sealed Class
- 一种关于低代码平台(LCDP)建设实践与设计思路
- Redis 数据类型list以及使用场景
- java|FPGA时序约束分享01_约束四大步骤