Pourquoi ne puis-je pas définir de nouvelles fonctions lorsque j'exécute pdb?

Par exemple, prenez 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 essaie de définir de manière interactive une nouvelle fonction:

def foo():

Je reçois l'erreur:

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

Pourquoi est-ce?

11
irritable_phd_syndrom 7 mars 2016 à 22:21

3 réponses

Meilleure réponse

Vous pouvez définir votre fonction dans une instruction d'une ligne en utilisant ; au lieu de l'indentation, comme ceci:

(Pdb) def foo(): print 'Hello world'; print 'I see you'
(Pdb) foo()
Hello world
I see you
7
Forge 10 juin 2017 à 15:31

J'ai pu importer des modules python à partir de la ligne de commande pdb.

Si vous pouvez importer des modules python, vous devriez pouvoir définir vos fonctions dans un fichier et simplement importer le fichier.

1
Trevor Boyd Smith 18 avril 2018 à 18:42

Je ne pense pas qu'il supporte l'entrée multi-ligne. Vous pouvez contourner ce problème en créant une session interactive à partir de 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
15
wim 7 mars 2016 à 20:20