Usually, python tracebacks look like this
To me, this output is hard to follow. Here is what I like more…
… and how to get this for your code
import sys, traceback, math def fsexcept(exc_type, exc_value, exc_traceback): frames = traceback.extract_tb(exc_traceback) framewidth = int(math.ceil(math.log(len(frames))/math.log(10))) filewidth = 0 linewidth = 0 functionwidth = 0 for frame in frames: filewidth = max(filewidth, len(frame[0])) linewidth = max(linewidth, frame[1]) functionwidth = max(functionwidth, len(frame[2])) linewidth = int(math.ceil(math.log(linewidth)/math.log(10))) print '\n\nTraceback: \033[1;92m{0}\033[0m: \033[1;91m{1}\033[0m'.format(exc_type.__name__, exc_value) for i in xrange(len(frames)): print ('\033[1;97m{0:' + str(framewidth) + '} \033[1;91m{1:' + str(filewidth) + '}\033[0m:{2:' + str(linewidth) + '} \033[1;92m{3:' + str(functionwidth) + '}\033[0m {4}').format(i, frames[i][0], frames[i][1], frames[i][2], frames[i][3]) print sys.excepthook = fsexcept
Copy the code above as fsexcept.py to your PYTHONPATH and add
import fsexcept
to whatever project you want to give modified tracebacks.