亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

Python 调试器:毫不费力地提高您的调试技能

对于我们中的许多人来说,调试 Python 代码归结为添加打印语句并尝试根据输出推断正在发生的事情。这并不理想,但出于某种原因,人们只是不想接触 Python 调试器。

目录

<导航>

使用 print 调试代码

如果您是使用 print 的人之一 对于调试,我不是在评判你 .学习 Python 很难。编程很难。生活艰难。我知道,如果您已经在苦苦挣扎,再学习另一件事似乎很烦人。并将该打印语句添加到您的代码中......这更容易。一点忏悔:我也一直这样做。它并不像某些人看起来的那么糟糕。

话虽如此,我将教你一个小技巧,就像在你的代码中添加打印语句一样简单。然而,这个技巧给你无限的调试能力,让你征服世界,如果你需要的话。

设置 Python 调试器断点

您不需要 IDE 即可正确调试代码。这个技巧总是有效的,即使在最简单的编辑器中,甚至在 Jupyter Notebooks 中也是如此。

诀窍归结为:使用指令 breakpoint() 设置所谓的断点 .无论您使用什么编辑器或 IDE,您都可以将它插入到您通常会放入该讨厌的打印语句的位置。

那么当你这样做时会发生什么?让我们来了解一下!创建一个简单的程序,如下所示:

def add_two(x):
    return x + 2
for i in range(1, 10):
    a = add_two(i)
    breakpoint()
    print(a)

当您运行它时,无论您是在 REPL、命令行还是在您的 IDE 中执行此操作,您都会被放入名为 PDB 的 Python 调试器中。但是现在呢?

使用 Python 调试器

当我启动上面的小程序时,会发生这样的事情:

$ python3 breakpointing.py
> /home/erik/breakpointing.py(7)<module>()
-> print(a)
(Pdb)_

这里有几件事可看:

Python 调试器实际上是一个功能齐全的 Python shell,就像 REPL 一样。

此时,我们可以检查当前环境。看看a的值是什么 现在是:

(Pdb) print(a)
3
(Pdb) print(i)
1

除了打印,您还可以使用 pdb 特定命令 p,如下所示:

(Pdb) p a
3
(Pdb_ p i
1

运行下一行

那么如果我们想运行下一行代码呢?有两种选择:

为了更清楚地说明这一点:step 愉快地进入一个函数调用并在该函数内部中断。相比之下,next 执行函数直到它返回,并在下一行中断。

其他调试器和 IDE 也将此称为“step into”(而不是 step)和“step over”(而不是 next)。

现在让我们使用这两个:

$ python3 breakpointing.py
-> print(a)
(Pdb) s
3
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) n
-> breakpoint()
(Pdb) n
-> print(a)
(Pdb) n
4
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) s
--Call--
-> def add_two(x):
(Pdb) s
-> return x + 2
(Pdb) s
--Return--
5
-> return x + 2
(Pdb) s
-> breakpoint()
(Pdb)

如您所见,我们首先跳过对 add_two 的调用 与 n .第二次,我们用 s 进入函数 .

Python 调试器命令

您可以自行尝试更多命令。我不会全部列出,只列出最有用的:

如需完整文档,请前往 Python 调试器页面,其中列出了所有命令。

不断学习

尽管这非常方便,但深入了解 IDE 提供的调试器是值得的。如果你是 VSCode 用户,我写了一篇关于如何在 VSCode 中调试 Python 代码的教程。


Python

  1. Python 输入、输出和导入
  2. 优化维护流程以提高效率
  3. 3D 打印您自己的定制杯架
  4. Python Print() 语句:如何通过示例打印
  5. Python 字符串:替换、连接、拆分、反转、大写和小写
  6. Python time.sleep():为您的代码添加延迟(示例)
  7. Python 换行:如何在 Python 中不使用换行进行打印
  8. 互联机队提高您的底线
  9. 原型如何改进您的制造过程
  10. 改进钣金零件的5种方法
  11. 改善设备维护计划的 3 个技巧
  12. 提示和注意事项:学习提高您的 PCB 设计技能