Rust将错误分成两大类
至於什麽时候该用什麽样的错误就要看使用情境了
例如程序启动时读不到设定档这个就可以使用不可复原的错误
fn main() {
panic!("恐慌性错误");
}
输出
thread 'main' panicked at '恐慌性错误', main.rs:2:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
panic会印出错误讯息以及第几行的讯息,还有提示可以设定RUST_BACKTRACE环境变数显示错误回朔资讯
下面执行时增加环境变数RUST_BACKTRACE=1
RUST_BACKTRACE=1 ./main
输出
thread 'main' panicked at '恐慌性错误', main.rs:2:5
stack backtrace:
0: std::panicking::begin_panic
1: main::main
2: core::ops::function::FnOnce::call_once
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
这时候可以看到简略的错误,也可以设定RUST_BACKTRACE=full会列出整个过程
Rust的panic不像Golang可以recover回来
Resut是个枚举型别
enum Result<T, E> {
Ok(T),
Err(E),
}
Reust是枚举型别就可以透过match来判断是回传OK还是回传Err,再依里面的泛型参数取值
use std::fs::File;
fn main() {
let f = File::open("hello.txt");
let _ = match f {
Ok(file) => {
println!("{:?}", file)
}
Err(error) => {
println!("{:?}", error)
}
};
}
输出
Os { code: 2, kind: NotFound, message: "No such file or directory" }
如果觉得match判断错误太麻烦,也可以透过unwrap或expect来直接产生panic错误
let f = File::open("hello.txt").unwrap(); // 无法指定错误讯息
let f = File::open("hello.txt").expect("开启hello.txt错误"); // 可以指定错误讯息
也可以在写函式时回传Result型别,这边简单定义Result泛型型别
fn main() {
let ok = return_result_ok();
println!("{:?}", ok);
let error = return_result_error();
println!("{:?}", error);
}
fn return_result_ok() -> Result<String, String> {
let s = String::from("成功");
return Ok(s);
}
fn return_result_error() -> Result<String, String> {
let s = String::from("失败");
return Ok(s);
}
<<: Day.29 部署环境 - 监控系统状态(Percona Monitoring and Management)
>>: 用React刻自己的投资Dashboard Day22 - API与前端资料需求比对
在与团队成员的定期面谈中,一个很常被问到的问题:「可以给我一点职涯发展的建议吗?我要怎麽做,才能成为...
大家好,我是毛毛。ヾ(´∀ ˋ)ノ 废话不多说开始今天的解题Day~ 11. Container W...
Step1: 建立ssh公钥及私钥 安装git 传送门,打开git bash执行下列指令 ssh-k...
前面两天,我们对需要用的栏位做了特徵工程、缺失值的补充、值得转换等 我们已经将资料前处理做得差不多了...
这是一篇记录我大专写到一半的笔记文,单纯是觉得写code写出了一点成就感,也是为了能记住曾经走过的歪...