작은 점수 계산 스크립트를 asyncio.gather에서 asyncio.TaskGroup으로 옮겼더니 대체 경로가 동작하지 않아요. 바꾸기 전에는 가중치 응답이 비어 있으면 가져오는 쪽에서 ValueError가 났고, except가 그걸 잡아서 기본 가중치로 점수를 계산했어요. 바꾼 뒤에는 같은 실패가 핸들러를 그냥 지나가요.
import asyncio
async def fetch_weights():
raise ValueError("weights missing")
async def main():
try:
async with asyncio.TaskGroup() as tg:
tg.create_task(fetch_weights())
except ValueError:
print("fallback weights")
asyncio.run(main())
3.13에서 이건 아무것도 출력하지 않아요. 트레이스백은 ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)로 끝나고, ValueError는 그 안에 들어 있어요.
그러니까 예외는 도착했어요. 실패한 태스크가 하나뿐인데도 감싸진 채로요. 핸들러를 고치기 전에 알고 싶은 건, TaskGroup이 항상 이렇게 감싸는지, 아니면 실패할 수 있는 태스크가 둘 이상일 때만 그런지예요.