Debugging ######### * the relationship between debugging and testing * reason for debugging: trying to pin down the root cause of unwanted/unexpected behaviour * reason for testing: specifying the expected behaviour in form of executable code (*i.e.* tests) * read the error messages of the Python interpreter * Most problems can be solved carefully reading the error messages * usual problem: RTFM * poor man's debugging: print statements * short-term strategy * not advocating using print statements instead of a debugger, but rather admitting what most people seem to do * tips and tricks how to use it sensibly (finding a lost print statement can be tedious) * convert bugs into tests * see next section on tests and testing for details * use the builtin Python debugger pdb * admittedly, I have never used it myself * see the official documentation for details