Rust uses a Result<T, E>
enum to catch errors. Functions that have the possibility of erroring returns the Result
type. Example:
use std::fs::File;
use std::io::ErrorKind;
fn main() {
let f = File::open("file.txt");
let f = match f {
Ok(file) => file, // Return the file
Err(error) => match error.kind() {
ErrorKind::NotFound => match File::create("file.txt") {
Ok(fc) => fc,
Err(e) => panic!("Cannot create the file: {:?}", e),
},
other_error => {
panic!("Problem opening the file: {:?}", other_error)
}
},
};
}
unwrap
can be used as a short cut if you want to panic!
on error. If an Ok
is returned, then unwrap
will return the value inside of the OK
.
let f = File::open("file.txt").unwrap();
Like unwrap
but executes closure if error occured.
let f = File::open("file.txt").unwrap_or_else(|err| {
println!("Error: {}", err);
// Do something else
});
Similar to unwrap
, expect
can be used to give your own error message in the case of an error.
let f = File::open("file.txt").expect("Failed to open file.txt");
Returns true if an error occurred:
let debug: bool = env::var("DEBUG").is_err();