sys.exc_info
exc_info()
This function returns a tuple of three values that give information
about the exception that is currently being handled. The information
returned is specific both to the current thread and to the current
stack frame. If the current stack frame is not handling an exception,
the information is taken from the calling stack frame, or its caller,
and so on until a stack frame is found that is handling an
exception. Here, handling an exception
is defined as executing
or having executed an except clause.
For any stack frame, only
information about the most recently handled exception is accessible.
If no exception is being handled anywhere on the stack, a tuple containing three None values is returned. Otherwise, the values returned are (type, value, traceback). Their meaning is: type gets the exception type of the exception being handled (a class object); value gets the exception parameter (its associated value or the second argument to raise, which is always a class instance if the exception type is a class object); traceback gets a traceback object (see the Reference Manual) which encapsulates the call stack at the point where the exception originally occurred.
If sys.exc_clear is called, this function will return three None values until either another exception is raised in the current thread or the execution stack returns to a frame where another exception is being handled.
Warning: Assigning the traceback return value to a local variable
in a function that is handling an exception will cause a circular
reference. This will prevent anything referenced by a local variable
in the same function or by the traceback from being garbage
collected. Since most functions don’t need access to the traceback,
the best solution is to use something like
exctype, value = sys.exc_info()[:2]
to extract only the exception type and value. If
you do need the traceback, make sure to delete it after use (best done
with a try-finally statement) or to call sys.exc_info in a function
that does not itself handle an exception. Note: Beginning with
Python 2.2, such cycles are automatically reclaimed when garbage
collection is enabled and they become unreachable, but it remains more
efficient to avoid creating cycles.