据我了解,Python 中有两种调试代码的方法:
-
使用传统的调试器,例如pdb
or ipdb
。这支持诸如c
for continue
, n
for step-over
, s
for step-into
等),但您无法直接访问 IPython shell,这对于对象检查非常有用。
-
Using IPython by 嵌入 http://ipython.org/ipython-doc/dev/interactive/reference.html#embedding-ipython代码中的 IPython shell。你可以做from IPython import embed
,然后使用embed()
在你的代码中。当你的程序/脚本遇到embed()
语句后,您将进入 IPython shell。这允许使用所有 IPython 功能对对象进行全面检查并测试 Python 代码。然而,当使用embed()
你不能一步步不再使用方便的键盘快捷键来浏览代码。
有没有办法结合两全其美? IE。
- 能够一步步使用方便的 pdb/ipdb 键盘快捷键浏览您的代码。
- 在任何此类步骤(例如,在给定的声明上),都可以访问成熟的IPython外壳.
IPython调试as in MATLAB:
这种类型的“增强调试”的示例可以在 MATLAB 中找到,其中用户always拥有对 MATLAB 引擎/shell 的完全访问权限,并且她仍然可以一步步通过她的代码,定义条件断点等。根据我与其他用户的讨论,这是人们从 MATLAB 迁移到 IPython 时最怀念的调试功能。
Emacs 和其他编辑器中的 IPython 调试:
我不想让问题太具体,但我主要在 Emacs 中工作,所以我想知道是否有任何方法可以将此功能引入其中。Ideally,Emacs(或编辑器)将允许程序员在代码的任何位置设置断点,并与解释器或调试器通信,使其停止在您选择的位置,并在该位置引入完整的 IPython 解释器。
ipdb.set_trace() 怎么样?在你的代码中:
import ipdb; ipdb.set_trace()
update:现在在Python 3.7中,我们可以编写breakpoint()
。其工作原理相同,但也遵循PYTHONBREAKPOINT
环境变量。这个功能来自于this PEP https://www.python.org/dev/peps/pep-0553/.
这允许对您的代码进行全面检查,并且您可以访问以下命令c
(继续),n
(执行下一行),s
(进入该点的方法)等等。
See the ipdb 仓库 https://github.com/gotcha/ipdb and 命令列表 https://wangchuan.github.io/coding/2017/07/12/ipdb-cheat-sheet.html. IPython https://ipython.org/现在被称为(编辑:部分)Jupyter https://jupyter.org/.
ps:请注意,ipdb 命令优先于 python 代码。所以为了写list(foo)
你需要print(list(foo))
, or !list(foo)
.
另外,如果您喜欢 ipython 提示符(它的 emacs 和 vim 模式、历史记录、完成等),那么您的项目很容易获得相同的提示符,因为它基于python提示工具包 https://github.com/jonathanslenders/python-prompt-toolkit/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)