하나의 예외 'A'를 처리하는 동안 다른 예외 'B'가 발생할 수 있습니다. Python 2.0 버전에서 이런 일이 발생하면 예외 B가 외부로 전파되고 예외 A가 손실됩니다. 문제를 디버그하기 위해 두 예외에 대해 아는 것이 유용합니다.
때로는 예외 처리기가 의도적으로 예외를 다시 발생시켜 추가 정보를 제공하거나 예외를 다른 유형으로 변환하는 것이 유용합니다. __cause__ 속성은 예외의 직접적인 원인을 기록하는 명시적인 방법을 제공합니다.
예외 체이닝은 Python 3에서만 사용할 수 있습니다. Python 3에는 raise ... from 절에서 chain 예외가 있습니다. 우리는 다음과 같이 raise..from 절을 사용하여 주어진 코드를 다시 작성합니다.
try: s = {‘a’:1, ‘b’:2}['c'] except KeyError as e: raise ValueError('failed') from e
Python 3은 기본적으로 다음과 같이 예외 처리 중에 발생한 모든 예외를 표시합니다.
Traceback (most recent call last): File "source_file.py", line 2, in <module> s = {'a':1, ‘b’:2}['c'] KeyError: 'c'
위의 예외는 다음 예외의 직접적인 원인이었습니다.
Traceback (most recent call last): File "source_file.py", line 4, in <module> raise ValueError('failed') from e ValueError: failed