PYTHON · 예외처리
컨텍스트 매니저 에러 처리
컨텍스트 매니저에서 예외를 잡고, 변환하고, 억제하는 패턴입니다.
예외처리중급context manager예외suppress에러 처리
핵심 설명
컨텍스트 매니저에서 예외를 잡고, 변환하고, 억제하는 패턴입니다.
Python code
from contextlib import contextmanager, suppress
# 예외를 변환하는 컨텍스트 매니저
@contextmanager
def error_handler(error_map: dict):
try:
yield
except tuple(error_map.keys()) as e:
new_error_cls = error_map[type(e)]
raise new_error_cls(str(e)) from e
# 사용
class APIError(Exception): pass
try:
with error_handler({ConnectionError: APIError, TimeoutError: APIError}):
raise ConnectionError("서버 다운")
except APIError as e:
print(f"API 에러로 변환됨: {e}")
# suppress: 특정 예외 무시
import os
with suppress(FileNotFoundError):
os.remove("없는파일.txt")
# FileNotFoundError가 발생해도 무시됨
print("파일 삭제 시도 완료")
# 리소스 정리 보장
@contextmanager
def managed_resource(name):
print(f" {name} 획득")
try:
yield name
except Exception as e:
print(f" {name} 에러 처리: {e}")
raise # 예외 재발생
finally:
print(f" {name} 해제")
try:
with managed_resource("DB") as r:
raise RuntimeError("쿼리 실패")
except RuntimeError:
print("외부에서 처리")학습 팁
suppress는 try/except: pass보다 의도가 명확하고 Pythonic합니다.
주의할 점
컨텍스트 매니저의 __exit__에서 True를 반환하면 예외가 억제됩니다. 의도하지 않은 억제에 주의하세요.
자주 묻는 질문
컨텍스트 매니저 에러 처리란 무엇인가요?
컨텍스트 매니저에서 예외를 잡고, 변환하고, 억제하는 패턴입니다.
컨텍스트 매니저 에러 처리 학습 시 주의할 점은 무엇인가요?
컨텍스트 매니저의 __exit__ 에서 True 를 반환하면 예외가 억제됩니다. 의도하지 않은 억제에 주의하세요.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.