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.excinfo()[: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.excinfo 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.
last updated 2 years ago by effbot #
