tengo un módulo de Python con una función:
def do_stuff(param1 = 'a'):
if type(param1) == int:
# enter python interpreter here
do_something()
else:
do_something_else()
¿Hay alguna manera de acceder al intérprete de línea de comandos donde tengo el comentario? de modo que si ejecuto lo siguiente en python:
>>> import my_module
>>> do_stuff(1)
obtengo mi siguiente mensaje en el alcance y contexto de donde tengo el comentario do_stuff()
?
Respuestas:
Insertar
import pdb; pdb.set_trace()
entrará en el depurador de Python en ese punto
Vea aquí: http://docs.python.org/library/pdb.html
fuente
pdb
es una gran pitón vainilla; si tiene espacio para traer un paquete externo,ipdb
es excelente: la misma funcionalidad que el depurador, pero con el resaltado de sintaxis, la finalización de pestañas, etc. de ipythonipdb
estaba en desuso, hoy en día usopdbpp
(pdb++
) , que tiene características similares y funciona conimport pdb; pdb.set_trace()
(es decir, parchea esa importación, por lo que es un reemplazoipdb
fue desaprobado? No puedo encontrar ninguna noticia de eso.ipdb
antes, pero disfrutépdbpp
desde entoncesSi desea un indicador interactivo estándar (en lugar del depurador, como se muestra en prestomation), puede hacer esto:
import code code.interact(local=locals())
Ver: el módulo de código .
Si tiene IPython instalado y desea un shell de IPython en su lugar, puede hacer esto para IPython> = 0.11:
import IPython; IPython.embed()
o para versiones anteriores:
from IPython.Shell import IPShellEmbed ipshell = IPShellEmbed() ipshell(local_ns=locals())
fuente
code.interact()
, a la PDBc(ontinue)
?code.interact()
es una llamada de bloqueo. Su programa se detendrá y esperará a que termine. Si sale del intérprete interactivo, su programa debe reanudarse con la declaración inmediatamente siguiente.help
función incorporada seSi desea un intérprete de Python predeterminado, puede hacerlo
import code code.interact(local=dict(globals(), **locals()))
Esto permitirá el acceso tanto a locales como a globales.
Si desea ingresar a un intérprete de IPython, la
IPShellEmbed
solución está desactualizada . Actualmente lo que funciona es:from IPython import embed embed()
fuente
code.interact(local=dict(globals(), **locals()))
es mucho mejor quecode.interact(local=locals())
porque este último te hace volver a importar paquetes