NeuroWhAI의 잡블로그

[Rust] panic 감지하여 잡기(catch) 본문

개발 및 공부/언어

[Rust] panic 감지하여 잡기(catch)

NeuroWhAI 2019. 1. 13. 15:57


panic은 Rust의 매크로로서  프로그램이 복구할 수 없는 오류에 빠졌을 때 프로그램을 즉시 종료하고 디버깅에 필요한 정보를 제공하는 기능을 합니다.

Rust는 panic이 일어난 것을 감지할 수 있는 기능도 제공합니다.

use std::panic;

fn main() {
    let result = panic::catch_unwind(|| -> i32 {
        println!("good");
        "42".parse().unwrap()
    });
    println!("{:?}", result);

    let result = panic::catch_unwind(|| -> i32 {
        println!("bad");
        "AaaaaAAaaaAAAaaAAAAaAAAAA".parse().unwrap()
    });
    println!("{:?}", result);
    
    println!("END!");
}
good
Ok(42)
bad
Err(Any)
END!

이렇게요.

bad이후 panic이 발생할테지만 프로그램이 종료되지 않고 끝까지 수행되는 것을 볼 수 있습니다.

catch_unwind의 반환형은 std::thread::Result이고 이를 통해 내부의 반환값이나 에러를 얻을 수도 있습니다.



Comments