use std::io::Error; fn main() { let path = "/tmp/file.txt"; // 如果路径不存在,对Result使用unwrap强制转成T会触发panic let rst = read_file(path).unwrap(); // 也可以用expect,可以带上自定义的错误信息提示 // let rst = read_file(path).expec
它会返回一个std::io::ErrorKind枚举,这个枚举包含了所有可能遇到的错误 。 use std::fs; use std::io::ErrorKind; fn read_a_file() -> Result<usize, std::io::Error> { let content = fs::read_to_string("./input.txt")?; return Ok(content.len()); } fn main() { let size = ...
} fn main() { match divide(10, 2) { Ok(result) => println!("Result: {}", result), Err(e) => println!("Error: {}", e), } } 在这个例子中,divide函数使用Result类型返回除法操作的结果。如果除数为零,返回Err;否则返回Ok包裹的商。 Option类型 与Result不同,Option类型用于表示值可能存在...
use std::error::Error;use std::fs::File;fn main() -> Result<(), Box<dyn Error>> {let f = File::open("hello.txt")?;Ok(())} 这样就能使用 ? 提前返回了,同时我们又一次看到了Box 特征对象,因为 std::error:Error 是 Rust 中抽象层次最高的错误,其它标准库中的错误都实现了该特征,因此...
error: could not compile `cargo_learn`. To learn more, run the command again with --verbose. 我们还可以使用match表达式来自定义对于返回值执行不同的操作: use std::fs::File; fn main() { let f = File::open("hello.txt"); let f = match f { ...
程序中任何可能出错的地方,都可以抛出异常;而异常可以通过栈回溯(stack unwind)被一层层自动传递,直到遇到捕获异常的地方,如果回溯到 main 函数还无人捕获,程序就会崩溃。如下图所示: 这样可以简化错误处理流程,解决了返回值传播的问题。 用异常更容易写代码,但当异常安全无法保证时,程序的正确性会受到很大的挑战。
usestd::fs::File;fnmain(){letgreeting_file_result=File::open("hello.txt");} File::open 的返回值是 Result<T, E>。泛型参数 T 会被 File::open 的实现放入成功返回值的类型 std::fs::File,这是一个文件句柄。错误返回值使用的 E 的类型是 std::io::Error。这些返回类型意味着 File::open 调...
use std::io::Error;fnmain(){letpath="/tmp/dat";//文件路径matchread_file(path){//判断方法结果Ok(file)=>{println!("{}",file)}//OK 代表读取到文件内容,正确打印文件内容Err(e)=>{println!("{} {}",path,e)}//Err代表结果不存在,打印错误结果}}fnread_file(path:&str)->Result<String,...
thread'main'panicked at'error occured',src\main.rs:3:5stack backtrace:...11:greeting::main at.\src\main.rs:3... 回溯是不可恢复错误的另一种处理方式,它会展开运行的栈并输出所有的信息,然后程序依然会退出。上面的省略号省略了大量的输出信息,我们可以找到我们编写的 panic! 宏触发的错误。
thread 'main' panicked at 'NOT_AN_EVEN', main.rs:9 note: Run with `RUST_BACKTRACE=1` for a backtrace. 1. 2. 输出枚举 枚举结果 - <T,E>可用于处理可恢复的错误,它有两个变体-OK和Err,T和E是通用类型参数,T表示在OK变量中成功情况下将返回的值的类型,E表示在Err变量中失败情况下将返回的错...