728x90
Chapter 9 - Error Handling
복구할 수 없는 오류 - panic!
- 패닉이 발생하는 경우
- 코드에 패닉을 유발하는 작업 수행
panic!
매크로를 명시적으로 호출함
- Cargo.toml
[profile.release]
panic = 'abort'
를 추가하여 설정할 수 있다.
복구할 수 있는 오류 - Result
- Result는 다음과 같은 열거형을 갖는다.
enum Result<T, E> {
Ok(T),
Err(E),
}
- 활용
use std::fs::File;
fn main() {
let greeting_file_result = File::open("hello.txt");
let greeting_file = match greeting_file_result {
Ok(file) => file,
Err(error) => panic!("Problem opening the file: {error:?}"),
};
}
- ErrorKind:: 를 활용하여 에러를 핸들링할 수 있다.
use std::fs::File;
use std::io::ErrorKind;
fn main() {
let greeting_file = File::open("hello.txt").unwrap_or_else(|error| {
if error.kind() == ErrorKind::NotFound {
File::create("hello.txt").unwrap_or_else(|error| {
panic!("Problem creating the file: {error:?}");
})
} else {
panic!("Problem opening the file: {error:?}");
}
});
}
unwrap
보다는expect
를 더 많이 선호한다.
operator ?
- 반환 유형이 사용된 값과 호환되는 함수에서만 사용 가능하다.
- result 값 뒤에 사용되며 match와 비슷하게 표현된다.
- ok값으면 ok 값을 반환하고, err값이면 err를 반환한다.
오류 처리 지침
- 코드가 나쁜 상태로 끝날 가능성이 있을 때 코드를 패닉 상태로 만드는 것이 좋다.
- 수정할 방법이 없을때 패닉 상태를 반환하는 것이 좋다.
- 그러나, 실패가 예상될때는 result로 반환하는 것이 더 적절하다.
- 값에 대한 제한이 있는 경우, 구조체와 같은 형식으로 값을 받을 때 조건을 거는 것이 좋다.
728x90
'Languages > RUST' 카테고리의 다른 글
[RUST] TRPL : Chapter 11 - Test (0) | 2024.12.01 |
---|---|
[RUST] TRPL : Chapter 10 - Generic Types & Lifetime (0) | 2024.11.29 |
[RUST] TRPL : Chapter 8 - Collections (0) | 2024.11.29 |
[RUST] TRPL : Chapter 7 - Project (0) | 2024.11.29 |
[RUST] TRPL : Chapter6 - Enum & Match (0) | 2024.11.28 |