Pregunta caer en el intérprete de python mientras se ejecuta la función


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 pasar al intérprete de línea de comando donde tengo el comentario? de modo que si ejecuto lo siguiente en python:

>>> import my_module
>>> do_stuff(1)

recibo mi próximo aviso en el alcance y contexto de donde tengo el comentario en do_stuff()?


73
2018-01-28 21:27


origen


Respuestas:


Insertar

import pdb; pdb.set_trace()

entrará en el depurador de Python en ese punto

Mira aquí: http://docs.python.org/library/pdb.html


48
2018-01-28 21:30



Si desea un aviso interactivo estándar (en lugar del depurador, como se muestra por prestomation), puede hacer esto:

import code
code.interact(local=locals())

Ver: el módulo de código.

Si tiene instalado IPython y desea un shell IPython, 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())

125
2018-01-28 21:53



Si quieres un intérprete de Python predeterminado, puedes hacer

import code
code.interact(local=dict(globals(), **locals()))

Esto permitirá el acceso a locales y globales.

Si desea ingresar a un intérprete de IPython, IPShellEmbed la solución es anticuado. Actualmente lo que funciona es:

from IPython import embed
embed()

18
2017-10-06 01:43