PYTHON · 예외처리
예외 체이닝
raise ... from으로 예외를 체이닝하여 원인과 결과를 명확히 연결합니다.
예외처리중급exception chaining예외 체이닝from__cause__
핵심 설명
raise ... from으로 예외를 체이닝하여 원인과 결과를 명확히 연결합니다.
Python code
# 명시적 예외 체이닝
class DatabaseError(Exception):
pass
class UserNotFoundError(Exception):
pass
def get_user(user_id: int) -> dict:
try:
# 데이터베이스 조회 시뮬레이션
if user_id < 0:
raise ValueError(f"잘못된 ID: {user_id}")
if user_id > 100:
raise ConnectionError("DB 연결 실패")
return {"id": user_id, "name": f"User-{user_id}"}
except ValueError as e:
raise UserNotFoundError(f"사용자 {user_id} 없음") from e
except ConnectionError as e:
raise DatabaseError("데이터베이스 오류") from e
# 체이닝된 예외 확인
try:
get_user(-1)
except UserNotFoundError as e:
print(f"에러: {e}")
print(f"원인: {e.__cause__}")
# 체이닝 억제: from None
def safe_parse(text: str) -> int:
try:
return int(text)
except ValueError:
raise ValueError(f"'{text}'는 숫자가 아닙니다") from None
try:
safe_parse("abc")
except ValueError as e:
print(f"에러: {e}")
print(f"원인: {e.__cause__}") # None학습 팁
from None을 사용하면 원래 예외를 숨겨 에러 메시지를 깔끔하게 만들 수 있습니다.
주의할 점
raise만 사용하면 암시적 체이닝(__context__)이 됩니다. 의도적 체이닝은 from을 명시하세요.
자주 묻는 질문
예외 체이닝란 무엇인가요?
raise ... from 으로 예외를 체이닝하여 원인과 결과를 명확히 연결합니다.
예외 체이닝 학습 시 주의할 점은 무엇인가요?
raise 만 사용하면 암시적 체이닝( __context__ )이 됩니다. 의도적 체이닝은 from 을 명시하세요.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.