如何在程序中启动Python控制台(以便轻松调试)?

6

多年来我一直在使用Matlab进行研究编程,我很想念能够在程序执行过程中暂停并通过交互式控制台检查变量、绘图、保存/修改数据等的方式,然后再恢复执行。

那么在Python中有没有类似的方法呢?

例如:


   # ... python code ...
   RunInterpreter
   # Interactive console is displayed, so user can inspect local/global variables
   # User types CTRL-D to exit, and script then continues to run
   # ... more python code ...

这将使调试变得更加容易。非常感谢您的建议!
6个回答

6

使用 pdb 库。

我在 Vim 中将这行代码绑定到 <F8>

import pdb; pdb.set_trace()

这将使您进入一个pdb控制台。

pdb控制台与标准Python控制台不完全相同...但它可以完成大部分相同的操作。此外,在我的~/.pdbrc中,我有:

alias i from IPython.Shell import IPShellEmbed as IPSh; IPSh(argv='')()

这样我就可以通过i命令从pdb进入“真正的”iPython shell:

(pdb) i
...
In [1]:

嘿,不错的iPython!得试一下。 - Yuji 'Tomita' Tomita

5
我找到的绝佳解决方案是使用“code”模块。现在我可以在代码的任何地方调用“DebugKeyboard()”,解释器提示将弹出,允许我检查变量并运行代码。CTRL-D将继续程序。
import code
import sys    

def DebugKeyboard(banner="Debugger started (CTRL-D to quit)"):

    # use exception trick to pick up the current frame
    try:
        raise None
    except:
        frame = sys.exc_info()[2].tb_frame.f_back

    # evaluate commands in current namespace
    namespace = frame.f_globals.copy()
    namespace.update(frame.f_locals)

    print "START DEBUG"
    code.interact(banner=banner, local=namespace)
    print "END DEBUG"

3

code模块包含用于启动REPL的类。


有趣,我不知道这个。我会试一试。 - Ankit Jaiswal

2

看一下Python调试器。简而言之,您可以插入

import pdb; pdb.set_trace()

在程序的任何需要调试的地方,您都可以使用它。 (请注意,在发布版本中应删除这些!)

1

pdb 是你要找的 - 只需在想要进入调试器的位置放置一个调用 pdb.set_trace() 即可。


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接