Getting terse tracebacks?

skip at pobox.com skip at pobox.com
Sun Jan 1 22:50:22 EST 2006


    Roy> Is there any way to make the traceback printer built into the
    Roy> interpreter elide all the directories in pathnames (like
    Roy> strip_dirs() does for the profiler)?

There's a compact traceback printer in asyncore (compact_traceback).  I used
it as the basis for a compact stack printer:

    import os
    import sys

    # adapted from asyncore.compact_traceback()
    def compact_stack(start=0, size=100):
        """build a compact stack trace from frame start to end"""
        f = sys._getframe(start+1)          # don't include this frame
        info = []
        while f:
            fn = os.path.normpath(os.path.abspath(f.f_code.co_filename))
            info.append((fn, f.f_code.co_name, f.f_lineno))
            f = f.f_back

        # eliminate any common prefix the filenames share
        info = [(f.split(os.sep)[-1], c, l) for (f, c, l) in info]

        return '\n'.join(['[%s|%s|%d]' % x for x in info[:size]])

    def print_compact_stack(f=sys.stderr, start=0, size=100):
        print >> f, compact_stack(start+1, size)

Skip



More information about the Python-list mailing list