"If debugging is the process of removing software bugs, then programming must be the process of putting them in." Edsger Dijkstra, Dutch computer scientist, winner of the 1972 Turing Award
Debugging is one of those things nobody really likes, but is very important to master. It can take hours, and because of Murphy's law, you most likely don't have that time. Therefore, it is important to be systematic and know your tools well. After you've found the bug and implemented a fix, you should have a unit test in place (if the bug has a related ID from an issue tracker, I usually name the test by appending the ID at the end). In this way, you will at least not have to go through the hell of debugging again. Unit testing is covered in the next chapter. We will debug the following buggy code. It tries to access an array element that is not present:
import numpy as np a = np.arange(7) print(a[8])
The IPython debugger works as the normal Python pdb
debugger; it adds features such...