Rust有2中不同的错误处理机制。
程序本身的bug,如
panic发生时,Rust给出2个选择
Run时,设置RUST_BACKTRACE=1, 会保存panic时的栈信息。沿着调用顺序反向展开清理,最后退出线程。如果是主线程就退出整个进程。
2种情况会终止进程
Rust没有异常,执行失败通过返回Result类型表示。
Result
处理错误通常使用match表达式。
错误处理的其他方法:
?
用于向上传播错误。如果返回成功,会取到成功的结果,如果返回失败,则终止函数,并返回失败。所以有Result返回值的函数中才能使用?
。
unwarp()也是Result的方法。和?
差不多,区别是在错误时,代码会panic。
expect() 在main中处理Result错误使用expect(), 不使用?,不能再向外传播了。 同unwarp(), 错误时会panic。区别在于except可提供自定义错误信息。