Trong quá trình handle exception 'A', có thể exception 'B' khác xảy ra. Trong Python 2.0, nếu điều này xảy ra, exception B được propagated ra ngoài và exception A bị mất. Việc biết cả hai exceptions hữu ích để debug vấn đề.
Đôi khi exception handler có ý định re-raise exception, hoặc để cung cấp thêm thông tin hoặc translate exception sang type khác. Attribute __cause__ cung cấp cách explicit để record direct cause của exception.
Exception chaining chỉ có trong Python 3. Python 3 có mệnh đề raise ... from để chain exceptions. Chúng ta viết lại code cho trước dùng raise..from clause như sau:
try:
s = {'a':1, 'b':2}['c']
except KeyError as e:
raise ValueError('failed') from e
Python 3 sẽ mặc định show tất cả exceptions xảy ra trong exception handling, như sau:
Traceback (most recent call last): File "source_file.py", line 2, ins = {'a':1, 'b':2}['c'] KeyError: 'c' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "source_file.py", line 4, in raise ValueError('failed') from e ValueError: failed