如何在 Python 中使用断点调试

实际上没人能一次就写出完美的代码,除了我。但是世界上只有一个我。

-- 林纳斯·托瓦兹(Linux 之父)

既然不是神,写代码自然免不了要修改。修改代码的过程被称作调试,又叫 debug。

刚接触编程的人,往往对调试代码没有很深的认识,觉得把功能做出来就完事了。一旦程序运行出现问题,便无从下手。而实际开发中,调试代码通常要花费比新编写代码更多的时间。所谓“行百里者半于九十”,这句话放在软件开发上一点不为过。你以为完成了 90% 开发工作的时候,剩下的工作可能还要花费差不多的时间。

因此,选择合理的调试方法和工具,对于开发来说意义重大。

在写 Python 代码的时候,我习惯的调试方法很简单,就是在程序里增加输出,以便了解程序的运行路径和变量的值。

以下面这段代码为例:

def twice(n):

n *= 2

return n

a = input("a:")

b = input("b:")

if a > 3:

b += 4

if b > 5:

c = a + twice(b)

else:

c = twice(a) + b

else:

b -= 2

if b < 1:

c = a - twice(b)

else:

c = twice(a) - b

print c

即使这样不长的一段代码,如果对于某些输入,最后输出的值和你的预期不一致,想要用肉眼从中看出到底哪里出了问题也并不是一目了然的事情。

于是我会添加一些辅助的代码:

def twice(n):

n *= 2

return n

a = input("a:")

b = input("b:")

print "====a,b:", a, b

if a > 3:

b += 4

print "====1 b:", b

if b > 5:

c = a + twice(b)

print "====1 c:", c

else:

c = twice(a) + b

print "====2 c:", c

else:

b -= 2

print "====2 b:", b

if b < 1:

c = a - twice(b)

print "====3 c:", c

else:

c = twice(a) - b

print "====4 c:", c

print c

运行后的效果:

a:2

b:4

====a,b: 2 4

====2 b: 2

====4 c: 2

2

通过添加类似的输出内容,就能比较清晰地了解程序的运行状态。

不过,直接通过输出来调试,有时候会需要一点经验判断,决定在哪里输出什么数据。尤其当程序复杂之后,需要参考的数值会很多,全部都输出会很繁琐。

一种更便捷更直观的方式就是使用断点调试。

断点(break point)是指在代码中指定位置,当程序运行到此位置时变中断下来,并让开发者可查看此时各变量的值。因断点中断的程序并没有结束,可以选择继续执行。

实现断点调试需要 IDE 的支持。下面以 PyCharm 来演示一下,仍然是前面的代码:

在某一行代码的左侧栏点击,就可以在这行增加断点。现在在 3 个 if 判断的地方都加上断点。

选择 debug,程序开始运行。

输入 a、b 两个值之后,程序就在第一个 if 处中断,并且在工具栏中显示出当前程序中的各种数值。

选择“resume program”,程序就会继续执行,直到遇到下一个断点。

有了断点功能的帮助,调试的时候就方便许多,很容易观察程序运行时的状态。

在断点调试时,还有个经常一起使用的功能就是单步调试。

在程序中断时,选择“Step Over”,会向下执行一行代码后继续中断。

当所处代码行中有函数时,“Step Into”会中断在函数内部,之后将在其中单步执行。对应的,“Step Out”将中断在执行完当前所在函数后的位置。

这些操作在工具栏有快捷按钮,也可通过快捷键操作。

“工欲善其事,必先利其器”。把上述调试工具熟悉之后,对你的开发效率将会有很大提升。

当然,比调试工具更重要的,还是调试的思路。遇到错误时,读懂报错信息,分析出错原因,并逐步定位问题所在,而不是盲目地修改代码、无意义地重复运行,才是解决问题的关键。

之后会继续跟大家分享调试代码的经验,这些经验都是一行行代码积累出来的。不过我的经验终究是我的经验,要把它变成你的经验,仍然需要经过一行行代码的磨练。

没有捷径。


(0)

相关推荐

  • pdb入门

    q 退出debugh 打印可用的调试命令b 设置断点,b 5 在第五行设置断点h command 打印command的命令含义disable codenum 使某一行断点失效enable codenu ...

  • vs2019调试技巧

    vs2019调试技巧

  • 如何在Windows中安装Python?

    如何在Windows中安装Python? 1. Python的安装 官网下载:https://www.python.org/downloads/windows/ 点开上面的链接,会发现有很多版本. 首 ...

  • C 程序调试(Dev C++版)

    当 C 语言程序能够正常编译并运行,但可能结果可疑或不对时,即,当程序没有语法错误而可能有逻辑错误时,就需要考虑使用调试 Debug功能来找出程序的 bug. 在调试过程中,可以让程序运行到设置好的断 ...

  • 如何在Python中操作日期和时间

    编写Python程序,处理日期和时间经常会遇到,幸好Python本身集成了很多日期.时间相关的模块,让这件繁琐的工作变的方便.本文介绍Python中功能强大的datetime模块. datetime模 ...

  • 高手如何在Python中使用collections模块

    来源:AI入门学习 介   绍 Python 3有许多内置的数据结构,包括元组.字典和列表.数据结构为我们提供了一种组织和存储数据的方法.collections模块能够帮助我们高效地填充和操作数据结构 ...

  • 如何在Python中操作MySQL~

    一. python操作数据库介绍 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口.Python 数据库接口支持非常多的数据库, ...

  • 如何在python中执行另一个py文件

      更新时间:2020年04月30日 10:24:22   作者:杰鑫哥   这篇文章主要介绍了如何在python中执行另一个py文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参 ...

  • 如何在Python中操作MySQL?

    一. python操作数据库介绍 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口.Python 数据库接口支持非常多的数据库, ...

  • 如何在Excel中调用Python脚本,实现数据自动化处理

    这次我们会介绍如何使用xlwings将Python和Excel两大数据工具进行集成,更便捷地处理日常工作. 说起Excel,那绝对是数据处理领域王者般的存在,尽管已经诞生三十多年了,现在全球仍有7.5 ...

  • (2条消息) Anaconda中的Spyder进行断点调试

    作为一个入门的算法工程师,你是不是在每一次出bug后,都要重新运行整个程序,查看是否报错呢? 实际上,在anaconda中有一排类似绿色运行标志的蓝色标志(如下),机智的你可能已经猜到了. 对,这就是 ...

  • 如何在 Excel 中调用 Python 脚本,实现数据自动化处理

    这次我们会介绍如何使用xlwings将Python和Excel两大数据工具进行集成,更便捷地处理日常工作. 说起Excel,那绝对是数据处理领域王者般的存在,尽管已经诞生三十多年了,现在全球仍有7.5 ...