One of the standard Python tools I haven’t made enough use of is the built-in debugger, pdb. Jeremy Jones gives us a tutorial on it: Interactive Debugging in Python. I hope his assessment of the place of the debugger in a programmer’s toolbox is inaccurate, though:
Programmers typically place debuggers in the “uh oh” corner of their toolboxes, somewhere between the network packet sniffer and the disassembler. The only time we reach for a debugger is when something goes wrong or breaks and our standard debugging techniques such as print statements (or better yet, log messages) do not reveal the root of the problem.