How do I ignore an error returned from a Rust function and proceed regardless?

帅比萌擦擦* 提交于 2020-04-06 02:22:57

问题


When it is known that some piece of code might throw an error, we make use of 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.


回答1:


Functions in Rust which can fail return a Result:

Result<T, E> 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.

  • 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?


来源:https://stackoverflow.com/questions/51141672/how-do-i-ignore-an-error-returned-from-a-rust-function-and-proceed-regardless

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!