在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. 非常感谢大家的建议,谢谢!
使用 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]:
我找到了一个很好的解决方案 就是使用 "代码 "模块。现在我可以从代码中的任何地方调用'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"
解释器 code
模块中包含了用于引入 REPL 的类。
pdb 是您正在寻找的--只需拨打电话给我们。pdb.set_trace()
无论你想在哪里放入调试器。
这里有一个更好、更简单的解决方案,在Python 3.8中工作https:/stackoverflow.coma13963864566456。
如果安装了IPython,功能更加强大https:/stackoverflow.coma81524844566456。