2016-03-07 1 views
7

Pourquoi ne puis-je pas définir de nouvelles fonctions lorsque je cours pdb?Comment définir une nouvelle fonction dans pdb

Par exemple prendre myscript.py:

#!/gpfs0/export/opt/anaconda-2.3.0/bin/python 
print "Hello World" 
print "I see you" 

Si je lance python -m pdb myscript.py et essayer de définir une nouvelle fonction interactive:

def foo(): 

Je reçois l'erreur:

*** SyntaxError: unexpected EOF while parsing (<stdin>, line 1) 

Pourquoi est-ce?

+1

Utiliser 'ipdb' au lieu de prise en charge multiligne – wim

Répondre

5

Vous pouvez définir votre fonction dans une déclaration d'une ligne à l'aide ; au lieu d'indentation, comme ceci:

(Pdb) def foo(): print 'Hello world'; print 'I see you' 
(Pdb) foo() 
Hello world 
I see you 
9

Je ne pense pas qu'il supporte l'entrée multi-ligne. Vous pouvez contourner ce problème en générant une session interactive depuis pdb. Une fois que vous avez terminé la session interactive, quittez-la avec Ctrl + D.

>>> import pdb 
>>> pdb.set_trace() 
(Pdb) !import code; code.interact(local=vars()) 
(InteractiveConsole) 
In : def foo(): 
...:  print 'hello in pdb' 
...: 
In : # use ctrl+d here to return to pdb shell... 
(Pdb) foo() 
hello in pdb