Why?
- 영어 공부 및 지식 습득
Summary
- pep654는 프로그램이 관련없는 에러, 예외 사항 여러개를 동시에 발생시키고, 처리할 수 있게 한다.
- ExceptionGroup, BaseExceptionGroup이라는 기본 type으로 이를 가능하게 한다.
- except* 문법은 예외 그룹의 하위 그룹과 일치하도록 일반화 할 수 있다.(ExceptionGroup 처리)
contents
needs
지금까지 interpreter는 순간에 1개의 에러만 전파하는게 가능했다. chaning기능은 원인과 내용으로 서로 관련된 예외를 연결하지만, 스택이 풀릴 때 관련이 없는 여러 에러들이 전파되기를 원할 수 있다.
real world use cases
- concurrent errors
- multiple failures when retrying an operation
- multiple user callbacks fail
- multiple errors in a complex calculation
- Erros in wrapper code
purpose
- except*는 확실하게 지금의 에러 핸들링 의미론과는 다르기 때문에, except 키워드의 동작을 수정하지 않고 새로운 문법을 추가했다.
specification
BaseExceptionGroup.subgroup(condition) 메서드는 원래 그룹과 동일한 메타 데이터(messave, cause, context, traceback)와 동일한 중첩 구조를 가지지만, condition이 참인 경우만 되도록 한다.
ExceptionGroup()
eg = ExceptionGroup(
"one",
[
TypeError(1),
ExceptionGroup(
"two",
[TypeError(2), ValueError(3)]
),
ExceptionGroup(
"three",
[OSError(4)]
)
]
)
- 설명이 어렵지만, 쉽게 말하면, 여러 예외 상황을 그룹으로 묶어서 한번에 처리할 수 있게 해준다는 뜻이다.
try:
raise ExceptionGroup("test1", [ValueError("Invalid value"), TypeError("Type error")])
except ExceptionGroup as eg:
raise eg
- 결과
except*
- ExceptionGroup을 쉽게 하기 위해서, except*를 이용하여 여러 예외를 처리 할 수 있다
try:
raise ExceptionGroup("test2", [ValueError("Invalid value"), TypeError("Type error")])
except* ValueError:
print("value")
- 결과
References
'Python' 카테고리의 다른 글
[fastapi documents] OpenAPI operationId (0) | 2024.08.17 |
---|---|
[python documents] python3.11 pep655 TypeDict (0) | 2024.08.11 |
[python documents] python3.11 pep594 사용 중단된 기본 모듈 목록 (0) | 2024.08.10 |
[python documents] python3.11 pep 681(Data class transforms) (0) | 2024.08.04 |
[Python documents] python3.11 속도 (0) | 2024.07.28 |