【Rust】错误处理

错误处理

Rust有2中不同的错误处理机制。

  • Panic :不可恢复错误。永远不应该发送的错误。
  • Result :可恢复错误。通常是由外部导致。

Panic

程序本身的bug,如

  • 越界访问数组
  • 整数被零除
  • 在值为None的Option上调用.unwrap()
  • 断言失败
  • 调用panic!主动发起

panic发生时,Rust给出2个选择

  • 展开栈, 默认选项
  • 终止进程

展开栈

Run时,设置RUST_BACKTRACE=1, 会保存panic时的栈信息。沿着调用顺序反向展开清理,最后退出线程。如果是主线程就退出整个进程。

终止进程

2种情况会终止进程

  1. 编译时加了-C panic=abort, 遇到第一个panic就会终止进程。
  2. 如果panic触发展开栈,清理期间.drop()方法触发了第二个panic,Rust会停止展开,终止整个进程。

Result

Rust没有异常,执行失败通过返回Result类型表示。

Result<T, E>类型表示,要么返回一个成功的结果T, 要么返回错误E。

处理错误通常使用match表达式。

错误处理的其他方法:

  1. 用于向上传播错误。如果返回成功,会取到成功的结果,如果返回失败,则终止函数,并返回失败。所以有Result返回值的函数中才能使用

  2. unwarp()也是Result的方法。和?差不多,区别是在错误时,代码会panic。

  3. expect() 在main中处理Result错误使用expect(), 不使用?,不能再向外传播了。 同unwarp(), 错误时会panic。区别在于except可提供自定义错误信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值