There are several ways to debug Python.
This tutorial focuses on PDB, the debugger provided with Python.
Documentation for PDB is here: https://docs.python.org/3.5/library/pdb.html
You can run your Python script directly using the debugger:
$ python -m pdb script.py
Or interactively, for postmorten debugging:
>>> import pdb
>>> import script
>>> # here you call the code that crashes
>>> pdb.pm
Alternately you can insert the debugging into your script:
# start debugging your script here
import pdb
pdb.set_trace()
Once you are in the debugger it provides the following commands:
EOF    c          d        h         list      q        rv       undisplay
a      cl         debug    help      ll        quit     s        unt
alias  clear      disable  ignore    longlist  r        source   until
args   commands   display  interact  n         restart  step     up
b      condition  down     j         next      return   tbreak   w
break  cont       enable   jump      p         retval   u        whatis
bt     continue   exit     l         pp        run      unalias  where
You can access this list by typing: help
You can get more help on each command by typing: help <topic> for example: help list brings up:
l(ist) [first [,last] | .]
        List source code for the current file.  Without arguments,
        list 11 lines around the current line or continue the previous
        listing.  With . as argument, list 11 lines around the current
        line.  With one argument, list 11 lines starting at that line.
        With two arguments, list the given range; if the second
        argument is less than the first, it is a count.
        The current line in the current frame is indicated by "->".
        If an exception is being debugged, the line where the
        exception was originally raised or propagated is indicated by
        ">>", if it differs from the current line.
In everyday use you'll mainly need to know:
c or continue - Continues running the codeq or quit - Quitsl or list - Displays several lines around the current line or continue the previous listing.s or step - Execute the current line, stop at the first possible occasion.n or next - Continue execution until the next line in the current function is reached or it returns.b or break - Set a breakpoint (depending on the argument provided).r or return - Continue execution until the current function returns.u or up - Move up the stack one frame.d or down - Move down the stack one frame.! <code> - Evaluates the <code> as Python on the current framereturn or <enter> - Repeates the last commandand of course you can type and run and valid Python code so long as it's not a pdb command.
In [ ]:
    
    
In [ ]: