ned A similar mechanism works implicitly if a new exception is raised when an exception is already being handled. An exception may be handled when an "except" or "finally" clause, or a "with" statement, is used. The previous exception is then attached as the new exception’s "__context__" attribute: >>> try: ... print(1 / 0) ... except: ... raise RuntimeError("Something bad happened") ... Traceback (most recent call last): File "", line 2, in ZeroDivisionError: division by zero During handling of the above exception, another exception occurred: Traceback (most recent call last): File "", line 4, in RuntimeError: Something bad happened Exception chaining can be explicitly suppressed by specifying "None" in the "from" clause: >>> try: ... print(1 / 0) ... except: ... raise RuntimeError("Something bad happened") from None ... Traceback (most recent call last): File "", line 4, in RuntimeError: Something bad happened Additional information on exceptions can be found in section Exceptions, and information about handling exceptions is in section The try statement. Changed in version 3.3: "None" is now permitted as "Y" in "raise X from Y". New in version 3.3: The "__suppress_context__" attribute to suppress automatic display of the exception context. a