https://docs.python.org/3/tutorial/errors.html#raising-and-handling-multiple-unrelated-exceptions
ExceptionGroup은 여러 예외 인스턴스를 한꺼번에 담아 한 번에 발생시킬 수 있는 예외
일반 except로 잡으면 하나의 예외처럼 취급된다.(type(e)가 ExceptionGroup).
try:
f()
except Exception as e:
print(f'caught {type(e)}: e')
caught <class 'ExceptionGroup'>: e-
중첩된 ExceptionGroup도 타입별로 분리해 처리
- except*를 쓰면 그룹 안에서 특정 타입만 골라 처리하고, 나머지는 다른 except*나 상위로 전파된다.
-
패턴: 여러 테스트/작업을 실행
- → 예외를 리스트에 모음
- → 리스트가 비어 있지 않으면 raise
- ExceptionGroup(”…”, excs)로 한 번에 보고.
사용법
excs = []
for item in items:
try:
do_work(item)
except Exception as e: # 이미 발생한 예외 e (인스턴스)
excs.append(e)
if excs:
raise ExceptionGroup("작업 중 실패", excs)- 잘못된 예: ExceptionGroup(“msg”, [ValueError, TypeError]) ← 타입(클래스)만 넣음.
- 올바른 예: ExceptionGroup(“msg”, [ValueError(“bad”), TypeError(“wrong type”)]) ← 인스턴스.