使用 IPython 逐步调试

2024-03-23

据我了解,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。

  1. 能够一步步使用方便的 pdb/ipdb 键盘快捷键浏览您的代码。
  2. 在任何此类步骤(例如,在给定的声明上),都可以访问成熟的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(使用前将#替换为@)

使用 IPython 逐步调试 的相关文章

  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • Emacs中跳转到声明的快捷键是什么?

    在 Visual Studio 中 编辑 C C 代码时 按 F12 按钮可以更轻松地跳转到函数或变量的声明 emacs 有快捷键可以做到这一点吗 嗯 事情比这更复杂一些 默认情况下 Emacs 不 了解 C 或 C 代码的函数声明 首先
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9

随机推荐