可以让Python脚本在某个时刻暂停并与之交互吗,比如使用IPython?

5 投票
2 回答
1692 浏览
提问于 2025-04-15 17:47

假设我有一个脚本,它做了很多事情,但在快结束的时候有些地方出问题了。我希望能在出问题的地方加一个 start_ipython() 的函数,这样可以在这个地方暂停脚本,让我用ipython来检查变量等等。我该怎么做呢?

2 个回答

7

最简单的方法就是使用内置的调试工具。在你想要程序暂停的地方,只需要这样做:

import pdb; pdb.set_trace()

这样你就会进入一个叫做pdb的命令行界面,在这里你可以查看变量的值,还可以修改它们。

另外,还有一个外部的ipdb包,你可以通过easy_install来安装,它的功能和这个一样。

15

请注意,这在 IPython-0.11 版本中有所变化。现在不需要使用下面描述的方式,只需使用以下导入方式:

from IPython import embed as shell

下面的答案适用于 0.11 之前的 IPython 版本。


在你想要进入 IPython 的地方,定义这个:

def start_ipython():
   from IPython.Shell import IPShellEmbed
   shell = IPShellEmbed()
   shell()

然后在你想进入解释器的地方调用 start_ipython

这样你就会进入一个解释器,并且会保留当时的 locals()

如果你想要一个普通的命令行,做这个:

def start_python():
   import code
   code.interact()

查看上述函数的文档以获取详细信息。我建议你先尝试 IPython 的方法,如果出现 ImportError 错误,就切换到普通模式,这样即使没有安装 IPython 也能正常工作。

撰写回答