如何在程序中启动python控制台(方便调试)?

问题描述 投票:5回答: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 ...

这样调试起来就容易多了 This would make debugging a lot easier. 非常感谢大家的建议,谢谢!

python console debugging interpreter
6个回答
6
投票

使用 pdb 库。

我把这一行绑定到 <F8> 在Vim中。

import pdb; pdb.set_trace()

这将使你陷入 pdb 控制台。

pdb 控制台不是 颇为 和标准的Python控制台一样......但它会做大部分相同的事情。另外,在我的 ~/.pdbrc,我已经得到了。

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

这样我就可以进入一个 "真正的 "iPython shell,从... pdb 随着 i 命令。

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

5
投票

我找到了一个很好的解决方案 就是使用 "代码 "模块。现在我可以从代码中的任何地方调用'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 的类。


2
投票

查看 Python调试器. 总之,你可以插入

import pdb; pdb.set_trace()

在你的程序中任何你想调试的地方。(注意,你应该在发布版本中删除这些内容!)


1
投票

pdb 是您正在寻找的--只需拨打电话给我们。pdb.set_trace() 无论你想在哪里放入调试器。


-1
投票

这里有一个更好、更简单的解决方案,在Python 3.8中工作https:/stackoverflow.coma13963864566456。

如果安装了IPython,功能更加强大https:/stackoverflow.coma81524844566456。

© www.soinside.com 2019 - 2024. All rights reserved.