enum Result<T, E> {
Ok(T),
Err(E),
}
let file = File::open("file.txt").expect("파일 열기 실패");
fn main() {
panic!("crash and burn");
}
출력 예시
thread 'main' panicked at src/main.rs:2:5:
crash and burn
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
fn main() {
let x = 42;
panic!("expected 0, got {}", x);
}
fn main() {
let v = vec![1, 2, 3];
let _ = v[99]; // panic: index out of bounds
}
fn sqrt(x: f64) -> f64 {
if x < 0.0 {
panic!("Cannot take sqrt of negative number: {}", x);
}
x.sqrt()
}
$ RUST_BACKTRACE=1 cargo run
| 적절한 상황 | 부적절한 상황 |
| ---------------------- | ----------------------- |
| 내부 버그나 불변식 위반 | 사용자 입력 오류 |
| 테스트/예제 코드에서 명시적 실패 표시 | 라이브러리 공개 API에서 실패 전파 |
| 초기화 실패(예: 파일이 없으면 안 됨) | 네트워크 연결 실패와 같은 복구 가능 오류 |
일반적으로 라이브러리는 Result<T, E>를 반환하고, 바이너리(main) 에서만 expect(), unwrap(), panic!을 사용하는 것이 권장됩니다
| 목적 | 복구할 수 없는 오류를 즉시 중단 |
| 기본 동작 | 스택 되감기(unwinding) |
| 대안 | Result<T, E> (복구 가능 오류) |
| 환경 변수 | RUST_BACKTRACE=1 |
| 종료 코드 | 101 |
| 러스트 기초편 3 (0) | 2025.08.30 |
|---|---|
| 러스트 기초편 1 / 2 (0) | 2025.08.30 |
| 컬렉션 (HashMap, HashSet) (6) | 2025.08.07 |
| 배열과 벡터 (0) | 2025.08.04 |
| 함수 + 반환값 (0) | 2025.08.03 |