Rust Error Handling
In Rust, error handling is done using the Result
type, which is an enum with two variants: Ok
and Err
. The Ok
variant holds a value indicating success, while the Err
variant holds an error value indicating failure.
Here's an example of how to use the Result
type for error handling in Rust:
use std::fs::File; use std::io::ErrorKind; fn main() { // try to open a file let file = match File::open("example.txt") { Ok(file) => file, Err(error) => match error.kind() { ErrorKind::NotFound => panic!("File not found!"), _ => panic!("Error opening file: {:?}", error) }, }; // do something with the file }
In this example, we're using the File::open
method to try to open a file called example.txt
. We're then using a match
expression to handle the Result
value returned by the method.
If the Result
is Ok
, we're binding the file handle to the file
variable. If the Result
is Err
, we're matching on the error value to determine the kind of error that occurred. If the error kind is NotFound
, we're panicking with an error message. Otherwise, we're panicking with the error value itself.
Rust provides several ways to propagate errors up the call stack, including the ?
operator, which is shorthand for unwrapping a Result
and returning an error if it is an Err
. Rust also provides the Result::unwrap
and Result::expect
methods for unwrapping a Result
and panicking with an error message if it is an Err
.
Rust's error handling system is designed to be robust and flexible, allowing developers to handle errors in a way that makes sense for their particular use case.