执行函数时进入python解释器

aar*_*acy 85 python

我有一个功能的python模块:

def do_stuff(param1 = 'a'):
    if type(param1) == int:
        # enter python interpreter here
        do_something()
    else:
        do_something_else()
Run Code Online (Sandbox Code Playgroud)

有没有办法进入命令行解释器,我有评论?所以如果我在python中运行以下内容:

>>> import my_module
>>> do_stuff(1)
Run Code Online (Sandbox Code Playgroud)

我得到了我在评论所在的范围和背景下的下一个提示do_stuff()

Mat*_*son 137

如果你想要一个标准的交互式提示(而不是调试器,如prestomation所示),你可以这样做:

import code
code.interact(local=locals())
Run Code Online (Sandbox Code Playgroud)

请参阅:代码模块.

如果你安装了IPython,并且想要一个IPython shell,你可以为IPython> = 0.11执行此操作:

import IPython; IPython.embed()
Run Code Online (Sandbox Code Playgroud)

或旧版本:

from IPython.Shell import IPShellEmbed
ipshell = IPShellEmbed()
ipshell(local_ns=locals())
Run Code Online (Sandbox Code Playgroud)

  • 对于IPython> = 0.11,IPython中没有更多模块Shell ...所以使用"import IPython; IPython.embed()"来启动它. (27认同)
  • `code.interact()`是一个阻塞调用.您的程序将停止并等待它完成.如果退出交互式解释器,程序应该立即恢复,并紧跟下面的语句. (4认同)

pre*_*ion 58

插入

import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

将在那时进入python调试器

见这里:http: //docs.python.org/library/pdb.html


Ron*_*xão 23

如果你想要一个默认的Python解释器,你可以这样做

import code
code.interact(local=dict(globals(), **locals()))
Run Code Online (Sandbox Code Playgroud)

这将允许访问本地和全局.

如果你想进入一个IPython解释器,IPShellEmbed解决方案已经过时了.目前有效的是:

from IPython import embed
embed()
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,`code.interact(local = dict(globals(),**locals()))`比`code.interact(local = locals())`好得多,因为后者让你重新导入包 (7认同)

wKa*_*vey 1

2023 年更新:breakpoint()此后包含在内py3.7,并将让您进入调试器(pdb默认情况下)。

如果您安装了其他调试器(ipdb仅举pdbpp几例),那么breakpoint()就会将您放入这些调试器中。

请参阅这些文档以获取更多信息:https ://docs.python.org/3/library/pdb.html