모듈을 작성 중이며 발생할 수있는 예외 (예 : FooError
모든 foo
모듈의 특정 예외에 대한 추상 클래스 에서 상속)에 대한 통합 예외 계층 구조를 원합니다 . 이를 통해 모듈 사용자는 이러한 특정 예외를 포착하고 필요한 경우 개별 예외를 처리 할 수 있습니다. 그러나 모듈에서 발생하는 많은 예외는 다른 예외로 인해 발생합니다. 예를 들어 파일의 OSError로 인해 일부 작업이 실패합니다.
필요한 것은 다른 유형과 메시지 를 갖도록 포착 된 예외 를 "랩핑"하여 예외를 포착 하는 모든 것에 의해 전파 계층 구조에 대한 정보를 추가로 사용할 수 있도록하는 것입니다. 그러나 기존 유형, 메시지 및 스택 추적을 잃고 싶지 않습니다. 그것은 문제를 디버깅하려는 누군가에게 유용한 정보입니다. 최상위 예외 처리기는 전파 스택을 더 높이기 전에 예외를 장식하려고하는데 최상위 처리기가 너무 늦기 때문에 좋지 않습니다.
이것은 foo
기존 유형 (예 :)에서 모듈 의 특정 예외 유형을 파생시켜 부분적으로 해결 class FooPermissionError(OSError, FooError)
되지만 기존 예외 인스턴스를 새로운 유형으로 랩핑하거나 메시지를 수정하기가 쉽지 않습니다.
Python의 PEP 3134 “Exception Chaining and Embedded Tracebacks”에서는 Python 3.0에서 예외 개체를“chaining”하기 위해 수용된 변경 사항에 대해 논의하여 기존 예외를 처리하는 동안 새로운 예외가 발생했음을 나타냅니다.
내가하려고하는 것은 관련이 있습니다. 이전 파이썬 버전에서도 작동해야하며 체인 연결이 아니라 다형성에만 필요합니다. 이것을하는 올바른 방법은 무엇입니까?
except Exception as e
.-> raise type(e), type(e)(e.message + custom_message), sys.exc_info()[2]
-> 이 솔루션은 다른 SO 질문에서 온 것 입니다. 이것은 예쁘지 않지만 기능적입니다.