错误处理

示例代码

// 这是一个package的开始 use std::fs::File; use std::io; use std::io::Read; fn main() { panic!("抛出了一个错误"); //抛出一个错误,程序中断 // enum Result<T, E> { // Ok(T), // Err(E), // } let f = File::open("hello.txt"); //返回一个Result的enums类型 let _ff = match f { // 没有被使用的变量可以加上下划线前缀 _ff ff没有被使用 Ok(_file) => println!("exits"), Err(error) => panic!("Problem opening the file: {:?}", error), }; // unwrap() expect(string) 俩个函数都是如果发生错误就直接panic! 否则返回正确的值,expect则允许传一个字符串作为错误提示 let _f = File::open("hello.txt").unwrap(); let _f = File::open("1.txt").expect("出错了"); let _g = open_file(); }

直接抛出错误

  • panic!(“出错了”) - 直接抛出一个错误后,程序中断
  • unwrap() - 对于返回类型是Result的结果,返回错误的话就直接panic!了,返回正确的话就得到正确的值
  • expect(“出错了”) - 和unwrap一个,区别在于可以传递一个自定义的错误信息

函数返回错误

#![allow(unused)] fn main() { fn open_file() -> Result<String, io::Error> { let mut s = String::new(); File::open("1.txt")?.read_to_string(&mut s)?; // 发生错误的话,直接return错误了 Ok(s) // 返回正确的值 } }
  • 函数返回结果是Result类型的话,可以直接使用?来直接return err,错误信息会传递给Result.
  • 这里最后一行结果会默认return给Result