예외 처리 (Exception Handling)
학습 목표
try/except/else/finally구문의 구조와 실행 순서를 이해한다- Python 내장 예외의 계층 구조를 파악할 수 있다
- 사용자 정의 예외를 만들고 활용할 수 있다
- 예외 처리의 적절한 사용 범위를 판단할 수 있다
왜 중요한가
프로그램은 항상 예상치 못한 상황에 직면합니다. 파일이 없거나, 네트워크가 끊기거나, 잘못된 입력이 들어올 수 있습니다. 예외 처리는 이런 오류 상황에서 프로그램이 우아하게 대응하도록 합니다. ML/DL에서는 OOM(메모리 부족), NaN 손실, 체크포인트 저장 실패 등의 상황에서 학습을 안전하게 복구하는 데 필수적입니다.try / except
try / except / else / finally
실행 순서
| 상황 | try | except | else | finally |
|---|---|---|---|---|
| 예외 없음 | 실행 | 건너뜀 | 실행 | 실행 |
| 예외 발생 (처리됨) | 예외 시점까지 | 실행 | 건너뜀 | 실행 |
| 예외 발생 (미처리) | 예외 시점까지 | 건너뜀 | 건너뜀 | 실행 후 예외 전파 |
주요 내장 예외
| 예외 | 발생 상황 | 예시 |
|---|---|---|
ValueError | 값이 부적절 | int("abc") |
TypeError | 타입이 부적절 | "2" + 3 |
KeyError | 딕셔너리 키 없음 | d["없는키"] |
IndexError | 인덱스 범위 초과 | [1,2][5] |
FileNotFoundError | 파일 없음 | open("없는파일") |
AttributeError | 속성/메서드 없음 | None.split() |
ZeroDivisionError | 0으로 나눔 | 1 / 0 |
raise - 예외 발생시키기
사용자 정의 예외
컨텍스트 매니저 (with)
with 문은 리소스의 안전한 획득과 해제를 보장합니다.
AI/ML에서의 활용
EAFP vs LBYL 방식의 차이는 무엇인가요?
EAFP vs LBYL 방식의 차이는 무엇인가요?
LBYL(Look Before You Leap): 실행 전에 조건 확인 (
if key in dict). EAFP(Easier to Ask Forgiveness than Permission): 일단 실행하고 예외 처리 (try/except). Python은 EAFP 방식을 권장합니다.BaseException을 잡아도 되나요?
BaseException을 잡아도 되나요?
except BaseException은 KeyboardInterrupt, SystemExit 등도 잡으므로 위험합니다. 일반적으로 except Exception까지만 사용하세요.체크리스트
-
try/except/else/finally의 실행 순서를 설명할 수 있다 - 적절한 내장 예외를 선택하여 처리할 수 있다
- 사용자 정의 예외를 만들고 활용할 수 있다
-
with문으로 리소스를 안전하게 관리할 수 있다 - 예외 처리의 범위를 적절히 좁힐 수 있다

