Concept Flow - Handling errors with match
Start
Call function that may error
match on Result
Use value
End
This flow shows calling a function that returns a Result, then using match to handle success (Ok) or error (Err) cases.
fn divide(a: i32, b: i32) -> Result<i32, String> { if b == 0 { Err(String::from("Cannot divide by zero")) } else { Ok(a / b) } } fn main() { match divide(10, 0) { Ok(result) => println!("Result: {}", result), Err(e) => println!("Error: {}", e), } }
| Step | Action | Evaluation | Result |
|---|---|---|---|
| 1 | Call divide(10, 0) | b == 0 is true | Returns Err("Cannot divide by zero") |
| 2 | match on Result | Result is Err | Go to Err branch |
| 3 | Print error message | Prints "Error: Cannot divide by zero" | Output to console |
| 4 | End | No more code | Program ends |
| Variable | Start | After Step 1 | After Step 2 | After Step 3 | Final |
|---|---|---|---|---|---|
| a | 10 | 10 | 10 | 10 | 10 |
| b | 0 | 0 | 0 | 0 | 0 |
| result | N/A | Err("Cannot divide by zero") | Err("Cannot divide by zero") | Err("Cannot divide by zero") | Err("Cannot divide by zero") |
| e | N/A | N/A | "Cannot divide by zero" | "Cannot divide by zero" | "Cannot divide by zero" |
Handling errors with match in Rust:
- Use functions returning Result<T, E>
- Use match to check Result:
match result {
Ok(val) => handle success,
Err(e) => handle error,
}
- This cleanly separates success and error handling.