파이썬으로 작업하던 중 “이 상황에서는 그냥 진행하면 안 되는데…” 싶은 순간에 의도적으로 에러를 발생시키는 게 필요해져서 알아보니 raise라는 문법을 발견했다. 이번 글에서는 raise의 사용 예시와 상황에 맞는 예외들을 정리해봤다
raise는 언제 쓰는 게 좋을까?
raise는 “이 상태는 정상 흐름이 아니다” 라는 것을 코드로 명확히 표현할 수 있는 방법이다.
입력값이 잘못됐거나, 필수 데이터가 없거나, 더 이상 처리를 진행하면 안 되는 경우에 특히 유용했다.
raise 사용 예시
def validate_age(age):
if age < 0:
raise ValueError("나이는 0 이상이어야 합니다.")
if age > 150:
raise ValueError("나이는 150 이하여야 합니다.")
return age
조건을 만족하지 않으면 즉시 ValueError를 발생시켜 함수 실행을 중단한다.
try:
validate_age(-5)
except ValueError as e:
print(e)
raise
except에서 로그만 남기고 다시 raise 하면, 에러 메시지를 유지한 채 프로그램을 종료할 수 있다.
상황에 맞는 예외 타입 선택하기
raise를 쓰면서 느낀 점은 예외 타입 자체가 설명서 역할을 한다는 것이다.
- 값이 잘못된 경우 →
ValueError - 타입이 다른 경우 →
TypeError - 딕셔너리 키 누락 →
KeyError - 리스트 범위 초과 →
IndexError - 파일 문제 →
FileNotFoundError,PermissionError
예외 타입과 메시지만 봐도 어떤 문제가 발생했는지 바로 파악할 수 있다.
실전 활용 예시
ETL 과정에 아래와 같은 검증용 매서드를 정의하여 이후 문제가 되는 상황을 잘 잡아냈었다.
def validate_dataframe(df, required_columns=None):
if df is None:
raise ValueError("입력 데이터가 None입니다.")
if not isinstance(df, pd.DataFrame):
raise TypeError("DataFrame이 필요합니다.")
if df.empty:
raise ValueError("데이터프레임이 비어있습니다.")
if required_columns:
missing = [c for c in required_columns if c not in df.columns]
if missing:
raise KeyError(f"필수 컬럼 누락: {missing}")
마무리
저는 평소 if, print를 사용해서 문제가 되는 부분들을 다 찍어보면서 처리했었는데 raise를 사용하면서 횟수가 상대적으로 줄어들었었습니다. 처음 raise를 알게 된 분들에게 도움이 되었길 바랍니다.