It provides TracerManager, which can allow multiple trace functions to coexist. It can easily be enabled and disabled, either manually or as a context manager in a with statement.
Tracer classes make handling the different trace events much easier.
class TraceExceptions(Tracer): def trace_exception(self, func_name, exctype, value, tb): print "Saw an exception: %r" % (value,)
events parameter, a list of trace events it will respond to, and a watch parameter, a list of paths it will respond to in the form of package.module.class.function.
This can easily wrap a trace function, or you can subclass Tracer and implement one of its helpful trace_*() methods.
And, a helper class FrameInspector which wraps a frame and makes it trivial to inspect the function name and arguments the function had been called with.