[Rust] 18. Result<T, E> (복구 가능한 에러 처리)
프로그래밍 언어/Rust2023. 2. 28. 19:47
Result<T, E>
복구 가능한 에러 처리 방법에 대해 살펴보도록 한다.
enum Result<T, E> {
Ok(T),
Err(E),
}
성공시 Ok(T), 실패시 Err(E) 인 2개의 variant 를 갖는다
에러 처리 방식 예제
use std::fs::File;
fn main()
{
let file = File::open("test.txt");
if file.is_ok()
{
println!("성공 : {:?} ", file.ok());
}
else
{
println!("실패 : {:?}", file.err());
}
}
// 결과
FAILE!!! : Some(Os { code: 2, kind: NotFound, message: "지정된 파일을 찾을 수 없습니다." })
* 터미널이 작업에서 다시 사용됩니다. 닫으려면 아무 키나 누르세요.
match 로 에러 값을 매핑시켜 새로운 코드를 작성할 수 있다.
use std::fs::File;
use std::io::ErrorKind;
fn main()
{
let _f = File::open("test.txt");
let _f = match _f
{
Ok(file) => file,
Err(error) => match error.kind()
{
ErrorKind::NotFound => match File::create("test.txt")
{
Ok(fc) => fc,
Err(e) => panic!("파일 생성 실패 : {:?}", e),
},
other_error => panic!("파일 읽기 실패 : {:?}", other_error),
},
};
}
파일이 존재한다면 file를 반환하지만, 만약 Err(error) 인 경우 match를 통해서 kind의 인자가 NotFound 인 경우 파일을 생성한다, 그 후 파일 생성에서도 Result<T, E>로 오류 체크를 하여 생성 성공 여부를 panic! 으로 처리된다.
unwrap과 expect 를 사용하여 간단히 에러 처리
match를 통한 에러 처리와는 다르게 간단하고 빠르게 처리할 수 있는 방법이다.
(1) unwrap
unwrap은 Ok 시 Ok 내부의 값을 반환하고, Err라면 panic!을 일으킨다.
use std::fs::File;
fn main()
{
let _f = File::open("test.txt").unwrap();
}
(2) expect
unwrap 와 같이 panic! 처리 되며, 에러 메시지를 사용자가 정의할 수 있다.
use std::fs::File;
fn main()
{
let _f = File::open("test.txt").expect("test.txt 파일 없음");
}
'프로그래밍 언어 > Rust' 카테고리의 다른 글
[Rust] 20. 트레잇 & 트레잇 바운드 (0) | 2023.03.05 |
---|---|
[Rust] 19. 제너릭(Generic) (0) | 2023.03.02 |
[Rust] 17. Panic! (복구 불가능한 에러 처리) (0) | 2023.02.25 |
[Rust] 16. Visual Studio Code + Rust 개발 환경 구축 (0) | 2023.02.22 |
[Rust] 15. Hashmap (해쉬맵) (0) | 2023.02.19 |