How to execute multi-line statements within Python”s own debugger (PDB)

So I am running a Python script within which I am calling Python"s debugger, PDB by writing:

import ipdb; ipdb.set_trace()

(iPython"s version of PDB, though for the matter I don"t think it makes a difference; I use it for the colored output only).

Now, when I get to the debugger I want to execute a multi-line statement such as an if clause or a for loop but as soon as I type

if condition:

and hit the return key, I get the error message *** SyntaxError: invalid syntax (<stdin>, line 1)

How can one execute multi-line statements within PDB? If not possible is there a way around this to still executing an if clause or a for loop?

Answer rating: 295

You could do this while in pdb to launch a temporary interactive Python session with all the local variables available:

(pdb) !import code; code.interact(local=vars())
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.

When you"re done, use Ctrl-D to return to the regular pdb prompt.

Just don"t hit Ctrl-C, that will terminate the entire pdb session.

Answer rating: 107

In python3 ipdb (and pdb) have a command called interact. It can be used to:

Start an interactive interpreter (using the code module) whose global namespace contains all the (global and local) names found in the current scope.

To use it, simply enter interact at the pdb prompt. Among other things, it"s useful for applying code spanning multiple lines, and also for avoiding accidental triggering of other pdb commands.

Get Solution for free from DataCamp guru