Как я могу использовать Result :: Ожидайте сообщения перед запаникованием? - PullRequest
0 голосов
/ 13 января 2020

Result::expect паникует данным сообщением. Тем не менее, я хотел бы войти до паники. Предполагая, что я использовал log фасад и реализацию, я хотел бы сделать что-то вроде:

// a result called `result`
result.something_like_expect(|e| {
    // assuming `e` is an error instance and implements `Display`
    error!("An error happened: {}", e);
    // and panics here
});

Есть ли такое решение с использованием Rust 1.39.0?

1 Ответ

1 голос
/ 13 января 2020

Вы можете попробовать использовать map_err с unwrap:

fn main() {
    let result: Result<(), String> = Err("error message".into());
    result.map_err(|e| log::error!("Failed with: {}", e)).unwrap();
}

Но я рекомендую хранить ошибки и просто отправлять их все вверх с помощью failure ящик:

use failure::{format_err, Error};

fn main() -> Result<(), Error> {
    let result: Result<(), Error> = Err(format_err!("error message"));
    let unwrapped_result = result?;
    Ok(())
}
...