debugrustMajor
How do I ignore an error returned from a Rust function and proceed regardless?
Viewed 0 times
errorhowreturnedfromfunctionandignorerustproceedregardless
Problem
When it is known that some piece of code might throw an error, we make use of
Such a construct in Java would continue on to execute
Can I make use of
I do see a
I want to use such a construct in a UT to ensure it continues to run even after an error has occurred.
try/catch blocks to ignore such errors and proceed. This is done when the error is not that important but maybe we only want to log it:try{
int i = 1/0;
} catch( ArithmeticException e){
System.out.println("Encountered an error but would proceed.");
}
x = y;
Such a construct in Java would continue on to execute
x = y;.Can I make use of
match to do this or any other construct?I do see a
try! macro, but perhaps it would return in case of an error with the return type of the method as Result.I want to use such a construct in a UT to ensure it continues to run even after an error has occurred.
Solution
Functions in Rust which can fail return a
I highly recommend reading the Error Handling section in the Rust Book:
Rust has a number of features for handling situations in which something goes wrong
If you want to ignore an error, you have different possibilities:
-
Don't use the
The function will be called, but the result will be ignored. If you omit
-
Ignore the
You may also convert the
-
Unwrap the error. This code panics if an error occurred though:
See also:
Result:Result is the type used for returning and propagating errors. It is an enum with the variants, Ok(T), representing success and containing a value, and Err(E), representing error and containing an error value.I highly recommend reading the Error Handling section in the Rust Book:
Rust has a number of features for handling situations in which something goes wrong
If you want to ignore an error, you have different possibilities:
-
Don't use the
Result:let _ = failing_function();The function will be called, but the result will be ignored. If you omit
let _ = , you will get a warning. As of Rust 1.59, you can omit the let and just write _ = failing_function();.-
Ignore the
Err variant of Result using if let or match:if let Ok(ret) = failing_function() {
// use the returned value
}You may also convert the
Result into Option with Result::ok:let opt = failing_function().ok();-
Unwrap the error. This code panics if an error occurred though:
let ret = failing_function().unwrap();
// or
let ret = failing_function().expect("A panic message to be displayed");try!() unwraps a result and early returns the function, if an error occurred. However, you should use ? instead of try! as this is deprecated.See also:
- What is this question mark operator about?
- Is the question mark operator ? equivalent to the try! macro?
- How to do error handling in Rust and what are the common pitfalls?
Code Snippets
let _ = failing_function();if let Ok(ret) = failing_function() {
// use the returned value
}let opt = failing_function().ok();let ret = failing_function().unwrap();
// or
let ret = failing_function().expect("A panic message to be displayed");Context
Stack Overflow Q#51141672, score: 89
Revisions (0)
No revisions yet.