j'ai un module python avec une fonction:
def do_stuff(param1 = 'a'):
if type(param1) == int:
# enter python interpreter here
do_something()
else:
do_something_else()
y a-t-il un moyen de passer dans l'interpréteur de ligne de commande où j'ai le commentaire? de sorte que si j'exécute ce qui suit en python:
>>> import my_module
>>> do_stuff(1)
j'obtiens ma prochaine invite dans la portée et le contexte de l'endroit où j'ai le commentaire do_stuff()
?
Réponses:
Insertion
entrera dans le débogueur python à ce stade
Voir ici: http://docs.python.org/library/pdb.html
la source
pdb
est un grand python vanille; si vous avez de la place pour apporter un package externe,ipdb
c'est génial - même fonctionnalité que le débogueur, mais avec la coloration syntaxique, la complétion des tabulations, etc. d'ipythonipdb
était obsolète, de nos jours j'utilisepdbpp
(pdb++
) , qui a des fonctionnalités similaires, et fonctionne avecimport pdb; pdb.set_trace()
(c'est-à-dire qu'il corrige qui importent, donc c'est un remplacementipdb
c'était obsolète? Je ne trouve aucune nouvelle à ce sujet.ipdb
avant, mais j'ai appréciépdbpp
depuisSi vous voulez une invite interactive standard (au lieu du débogueur, comme indiqué par prestomation), vous pouvez le faire:
Voir: le module de code .
Si vous avez installé IPython et que vous voulez un shell IPython à la place, vous pouvez le faire pour IPython> = 0.11:
ou pour les anciennes versions:
la source
code.interact()
, à la PDBc(ontinue)
?code.interact()
est un appel bloquant. Votre programme s'arrêtera et attendra qu'il se termine. Si vous quittez l'interpréteur interactif, votre programme devrait reprendre avec l'instruction immédiatement suivante.help
fonction intégrée est remplacée, etc.Si vous voulez un interpréteur Python par défaut, vous pouvez faire
Cela permettra d'accéder à la fois aux locaux et aux globaux.
Si vous souhaitez accéder à un interpréteur IPython, la
IPShellEmbed
solution est obsolète . Actuellement, ce qui fonctionne est:la source
code.interact(local=dict(globals(), **locals()))
c'est tellement mieux quecode.interact(local=locals())
parce que ce dernier vous oblige à réimporter des paquets