根据我的阅读,有两种方法可以在Python中调试代码:使用传统的调试器,例如pdb或ipdb。它支持诸如cfor continue,nfor step-over,sforstep-into等命令,但是您没有直接访问IPython shell的权限,这对于对象检查非常有用。使用 IPython的通过嵌入代码中的一个IPython的壳。您可以这样做from IPython import embed,然后embed()在您的代码中使用。当您的程序/脚本命中一条embed()语句时,您将进入IPython Shell。这样就可以使用所有IPython好东西对对象进行全面检查并测试Python代码。但是,在使用时,embed()您将无法通过便捷的键盘快捷键逐步完成代码。有什么办法可以将两全其美相结合?IE能够 一步一步的通过与得心应手的pdb / IPDB键盘快捷键你的代码。在任何这样的步骤(例如,在给定的语句上),都可以访问成熟的IPython shell。在MATLAB中进行IPython调试:在MATLAB中可以找到这种“增强调试”类型的示例,在该示例中,用户始终可以完全访问MATLAB引擎/外壳,并且她仍可以逐步浏览代码,定义条件断点等。我已经与其他用户讨论过,这是人们从MATLAB迁移到IPython时最想念的调试功能。在Emacs和其他编辑器中进行IPython调试:我不想让这个问题过于具体,但是我主要在Emacs中工作,所以我想知道是否有任何方法可以将此功能引入其中。理想情况下,Emacs(或编辑器)将允许程序员在代码上的任意位置设置断点,并与解释器或调试器进行通信,以使其在您选择的位置停止,并在该位置提供完整的IPython解释器。
3 回答
莫回无
TA贡献1865条经验 获得超7个赞
ipdb.set_trace()呢?在您的代码中:
import ipdb; ipdb.set_trace()
更新:现在在Python 3.7中,我们可以编写breakpoint()。它的工作原理相同,但也遵守PYTHONBREAKPOINT环境变量。此功能来自此PEP。
这样可以对代码进行全面检查,并且您可以访问诸如c(继续),n(执行下一行),s(进入该点的方法)之类的命令。
请参阅ipdb repo和命令列表。IPython现在称为Jupyter(的一部分)。
ps:请注意,ipdb命令优先于python代码。因此,要写作,list(foo)您需要print(list(foo))或!list(foo)。
另外,如果您喜欢ipython提示符(它的emacs和vim模式,历史记录,完成情况等),由于它基于python提示符工具包,因此很容易为您的项目获得相同的名称。
添加回答
举报
0/150
提交
取消