@vicenta_kertzmann
Rust предоставляет несколько механизмов для обработки ошибок:
@vicenta_kertzmann
Rust обладает несколькими механизмами для обработки ошибок:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
fn divide(numerator: i32, denominator: i32) -> Result<i32, String> { if denominator == 0 { Err(String::from("Делитель не может быть нулем")) } else { Ok(numerator / denominator) } } fn main() { let result = divide(42, 0); match result { Ok(value) => println!("Результат деления: {}", value), Err(error) => println!("Ошибка: {}", error), } } |
1 2 3 4 |
fn main() { let vector = vec![1, 2, 3]; println!("Элемент с индексом 10: {}", vector[10]); } |
В данном примере при выполнении программы возникнет ошибка "паника из-за переполнения индекса вектора".
1 2 3 |
let result: Result<i32, String> = Ok(42); let value = result.unwrap(); println!("Результат: {}", value); |
В данном примере unwrap
возвращает значение Ok
, если оно есть, и вызывает панику, если в результате содержится Err
.
Кроме того, Rust также предлагает другие техники обработки ошибок, такие как оператор ?
для упрощения и распространения ошибок и макрос expect
для вывода дополнительной информации при возникновении ошибки.