揭秘 IPython 的 5 种最佳调试方法

  • 时间:
  • 浏览:0
  • 来源:神彩大发11选5_彩神大发11选5官方

对我而言,最常用的做法是在代码中嵌入另另两个IPython会话。你只并能 在代码中插入以下两行就并能 做到:

不管你最终使用哪个调试器,它们全部还会一组相当标准的命令。让我通过调用next命令(不可能 就说 n命令)来执行下一行,通过调用step(或s)命令进入函数内部内部结构,使用continue(或c)命令继续执行直至下另另两个断点,使用l或ll命令显示当前代码执行的位置,等等。不可能 你是另另两个CLI(命令行接口)类型调试器的新手,只有 “使用Pdb调试Python代码教程”应该对你掌握它们会有帮助。

云栖号:https://yqh.aliyun.com

第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!

不可能 运行%pdb 1(或%pdb on)命令,调试器将在每个未处理的异常上自动启动。让我使用%pdb 0或关闭%pdb on命令关闭四种 功能。不带任何参数运行地运行%pdb将在打开和关闭自动调试器之间进行切换。

原来 话语,我只并能 敲一次键盘就能把它移除掉。若果,在Python中,将多个话语放上同一行是四种 坏习惯,若果所有的code linter还会将这行作为另另两个什么的问题标注出来,原来 话语,当调试完成后,调试就不用忘记把它移除??。

Tenderlove(Ruby和Rails的核心开发人员之一)写了一篇很棒的文章,叫做“I am a puts debuggerer”,当我还在玩Ruby的前一天,我很喜欢这篇文章。这篇文章的重点是想告诉你们你们你们 :在一点清况 下,你不并能 另另两个成熟期期 是什么图片 期的句子的调试器。别误会我(不可能 Tenderlove)的意思,我认为,另另两个好的集成开发环境(IDE)附带的调试器是开发人员并能拥有的最强大的工具之一!它能让我并能 很轻松地在代码放上置断点、在stack trace中移动、不可能 动态地检查和修改变量。它也使开发人员在大型代码库上工作更加轻松,若果并能 帮助新手守护进程员加快新项目的进度。

最后,不可能 居于原来 四种 清况 :你希望将断点放上另另两个全部都还会你将要运行的文件中。比如说,某个bug不可能 隐藏在另另两个导入的模块中,而你我应该 再键入1000次next命令就并能 执行到那里。-b参数并能 接受另另两个文件名,后跟另另两个冒号和另另两个行号,以指定要将断点确切放置到的位置,修改后的代码如下:

当你运行代码若果解释器到达蕴含embed()函数的行时,它将打开另另两个IPython会话。让我仔细查看代码中居于了那些。当你完成后,你只并能 使用Ctrl+d关闭会话,代码将继续执行。四种 土方法的另另两个优点是,当你关闭IPython会话时,你在IPython中所做的所有修改都将保存下来。若果,让我用四种 土方法对变量或函数进行修改(甚至并能 用一点简单的日志来修饰函数),并查看其余代码的行为。

IPython共有176项形态。事后调试是最好的形态,大慨对我来说是原来 。假设你正在运行另另两个长期运行的脚本,在运行了15分钟后,它另另两个劲崩溃了。只有 ,你能做的是设置一点断点,重新运行它,若果再等待歌曲15分钟,看看居于了那些吗?不可能 你用的是IPython,若果调用另另两个神奇的命令%debug,你就无须等待歌曲了。%debug将加载最后另另两个异常居于时的stack trace,若果启动调试器(Python将最后另另两个未处理的异常存储在sys.last_traceback变量中)。这是另另两个很好的形态,它并能 让我直接启动调试器,节省了好多个小时的重新运行一点命令的时间。

事后调试(Post-mortem debugging)

Python的默认调试器(pdb)相当初级。就像在标准Python REPL(—种交互式解释器环境。R-read)、E-evaluate)、P-print)、L-loop)中一样,它只有 语法突另另两个劲出现示或自动缩进的功能。另另两个更好的选择是ipdb。它将使用IPython作为调试器。要启用它,并能 将里边代码中的pdb替上加ipdb:

还有原来 有趣的调试器PDB++。它有一组不同于ipdb的形态,同类,另另两个不断显示代码当前位置的粘滞模式。

下面是你们你们你们 运行它时居于的清况 :

如上所见,我更改了a变量的值,当我关闭IPython会话后,a的新值保留下来了。

我使用VS Code不可能 快两年了,但我不记得上次使用其内置的调试器是那些前一天。我大偏离 的调试工作全部还会在IPython中完成的。以下是我的调试土方法:

另另两个好的集成开发环境(IDE)附带的调试器是开发人员并能拥有的最强大的工具之一,但并全部还会每被委托人全部还会使用另另两个蕴含很棒代码调试器的集成发环境(IDE)。作为守护进程员,在调试 Python 代码时,你真是最好用的调试器有那些?不可能 只有 话语,不妨试试使用 IPython 作为调试器吧。

里边的代码看起来太熟悉吧?使用print话语进行代码调试是毫无什么的问题的。好多好多 前一天,让我 做的就说 找出Bug。有前一天,这也还会你能运用的调试代码的唯一土方法。不可能 在不影响用户使用的前提下,你好难将调试代码上加到生产环境代码中。然而,仅仅上加一点print话语,若果查看日志应该不用造成那些什么的问题。

使用%pdb自动启动调试器

不可能 要将断点放上第一行之外的一点位置,并能 使用-b参数。以下代码将断点放置在第42行的位置:

让调试更加方便的唯一土方法是在居于异常时自动启动调试器。IPython中的四种 神奇的命令 - %pdb就能实现四种 点。

并全部还会每被委托人全部还会使用另另两个蕴含很棒代码调试器的集成发环境(IDE)。2019年Stack Overflow开发者调查报告显示:1000.5%的开发人员使用Notepad++,25.4%的开发人员使用Vim,23.4%的开发者使用Sublime Text。那些全部还会文本编辑器!尽管让我看开发人员在使用Vim时比大多数使用PyCharm或VS Code的用户更有下行强度 ,若果要记住另另两个文本编辑器无须会蕴含强大的代码调试器。要调试Python代码,你当然并能 使用标准的Python调试器pdb,若果现在你另另两个更好的选择:那就说 使用IPython作为调试器。

以下为译文:

IPython还有另外四种 土方法启动另另两个调试器。你不并能 像前面那样修改任何文件的源代码。你只并能 运行%run -d filename.py四种 神奇的命令,若果IPython将执行filename.py文件并在其第一行设置另另两个断点。作用等同于将import ipdb; ipdb.set_trace()手动放上filename.py文件中,若果使用python filename.py命令来运行它一样。

里边的代码将在名为myotherfile.py的文件的第42行设置另另两个断点,若果结束了了英语 英语 执行myotherfile.py文件。一旦Python解释器到达myotherfile.py,它将在断点处停止。

云栖号:https://yqh.aliyun.com

第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!

不可能 你想查看在给定代码行上居于的清况 ,在代码中嵌入另另两个IPython会话是不错的做法。若果它只有像真正的调试器那样,让我并能 执行下一行代码。好多好多 更好的土方法是在代码放上置另另两个断点。从Python 版本3.7结束了了英语 英语 ,另另两个新的名为breakpoint()的内置函数并能 用来放置断点。不可能 你使用的是较低版本的Python,让我通过运行以下代码来实现同样的效果:

我喜欢把这两行代码放上同一行,像下面原来 :

不可能 使用的是标准pdb调试器,则并能 通过运行import pdb; pdb.pm()命令来实现相同的效果。

原文发布时间:2020-1-18

本文作者:switowski

本文来自阿里云云栖号企业协作伙伴“CSDN”,了解相关信息并能 关注“CSDN”

将IPython会话嵌入到代码中

然而,今天的你们你们你们 仍然会使用print话语来调试你们你们你们 的代码。我另另两个劲原来 做,不可能 打印出另另两个变量既快又容易。“让我 结束了了英语 英语 调试会话”这句话听起来很沉重,而“我认为四种 变量有什么的问题。让我 打印出来看看!”就轻松多了。下面就说 你们你们你们 用5分钟就能写出的另另两个print话语的例子:

在代码放上置断点

记住,这里指定的行并能 蕴含实际执行一点操作的代码。只有是空行或注释行!

下面是使用embed()的简短演示。假设你们你们你们 有以下代码:

猜你喜欢

《重构:改善既有代码的设计》—第1章1.4节运用多态取代与价格相关的条件逻辑

加入你你什儿 层间接性,大伙儿 就能能在Price对象内进行子类化动作[4],于是便可在任从太多时刻修改价格。引入State模式花了我不少力气,值得吗?那末做的收获是:而且

2020-02-21

家里wifi正常,手机和pad都能连接,但是笔记本电脑却搜索不到自己家的wi

怪怪的推荐展开完整性扫描二维码下载为你推荐: 我来答展开完整性可选中一另三个 或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题报告 。下载百度知道AP

2020-02-21

手机能连上wifi但是网页打不开怎么办?

7.备份手机数据(电话簿、短信息、多媒体文件等),恢复出厂设置4.有无 离无线路由器距离过远,影响接收信号。6.更新下系统版本后测试有无 有改善2.建议忘记网络重新连接,操

2020-02-20

MongoDB readConcern 原理解析

MongoDB:通过ReadConcern来出理 备库一致读的难题【直播回顾】阿里技术专家一挃:MongoDB优化器&执行器介绍MongoDB·引擎特性·事务实现解析

2020-02-20

rdiframework的主页

发布时间:2018-03-0516:47:16浏览:836回帖:0 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blo

2020-02-20