एक एक्सेप्शन 'A' को हैंडल करने के दौरान, यह संभव है कि दूसरा एक्सेप्शन 'B' हो जाए। पायथन 2.0 संस्करणों में, यदि ऐसा होता है, तो एक्सेप्शन B बाहर की ओर प्रसारित होता है और एक्सेप्शन A खो जाता है। समस्या को डीबग करने के लिए दोनों एक्सेप्शन के बारे में जानना उपयोगी होता है।
कभी-कभी एक एक्सेप्शन हैंडलर के लिए जानबूझकर एक्सेप्शन को फिर से उठाना उपयोगी होता है, या तो अतिरिक्त जानकारी प्रदान करने के लिए या एक्सेप्शन को दूसरे प्रकार में अनुवाद करने के लिए। __cause__ एट्रिब्यूट एक्सेप्शन के प्रत्यक्ष कारण को रिकॉर्ड करने का एक स्पष्ट तरीका प्रदान करता है।
एक्सेप्शन चेनिंग केवल पायथन 3 में उपलब्ध है। पायथन 3 में एक्सेप्शन चेन करने के लिए raise ... from क्लॉज है। हम दिए गए कोड को raise..from क्लॉज का उपयोग करके निम्न प्रकार से फिर से लिखते हैं:
try:
s = {'a':1, 'b':2}['c']
except KeyError as e:
raise ValueError('failed') from e
पायथन 3 डिफ़ॉल्ट रूप से एक्सेप्शन हैंडलिंग के दौरान हुए सभी एक्सेप्शन दिखाएगा, जैसे:
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