Python代码调试技巧教程详解
作者:写代码的明哥 发布时间:2021-05-15 02:50:31
关于代码调试的技巧,我之前写过很多的文章,关注比较早的同学,也应该都有看过。
还没看过的同学,欢迎前往查阅:更多Python代码调试技巧
其中有一篇是关于 pdb 的调试技巧的:
里面介绍了两种 pdb 的调试入口,也是大部分所熟知的。
这里再带大家回顾一下
第一种:指定 -m pdb
来开启
$ python -m pdb pdb_demo.py
第二种:使用 pdb.set_trace()
在代码中设置断点
import pdb
pdb.set_trace()
但其实,pdb 还另外两种调试方法,第一种方法,可能有 99% 的开发者都没用过,甚至连见过都没有。
这两种方法,是配合 Python Console 的交互界面来实现的。
首先我准备好一个名为 utils.py
的 Python文件,里面定义了一个 sum 的工具函数(仅作演示用)。
def sum(*args):
result = 0
for arg in args:
result += arg
return result
然后在终端敲入 Python 进入 Console 的模式,导入这个模块,并调用 sum 函数,在正常情况下,函数可以正常工作。
>>> import utils
>>> utils.sum(1,2,3)
6
但如果你的参数类型传成了 str,函数就会报错啦~
>>> utils.sum(1,2,"3")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/MING/utils.py", line 4, in sum
result += arg
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
由于这里的报错是我刻意触发的,从报错来看,是很容易定位的。
但是在实际应用中,难免会遇到一些无法从报错信息直接判断 bug 所在的情况。
这个时候,如果可以在报错后,切换到 pdb 的调试模式就好了~
事实上,pdb 是支持这种用法的。
只要你在当前的会话中,导入 pdb,再执行 pdb.pm()
,就可以切换到熟悉的 pdb 调试界面,并在抛错的地方打上断点,然后你就可以任意的查看运行时的变量信息。
如果你不是想等报错了再调试,而是一开始就想进入调试模式,可以使用 pdb.runcall()
函数
有的同学可能还会想到 pdb.run()
和 pdb.runeval()
这两个函数,但这两种方法,是需要提前在函数调试断点的,这就比较麻烦了,一般情况下不推荐使用。
综上所述, pdb 调试方法主要有六种:
python -m pdb
:运行 python 文件时直接进入调试模式
pdb.set_trace()
:事先设置断点,然后直接运行 python 文件
pdb.run()
:事先设置断点,然后直接运行 python 模块
pdb.runeval()
:事先设置断点,然后直接运行 python 模块(与 pdb.run 类似)
pdb.pm()
:在 Console 模式下出错后直接切换到调试模式,并定位到报错位置。
pdb.runcall()
:可以在不设置断点的情况下,直接调试代码片段。
其中,pdb.pm()
是本文的重点,他虽然冷门,但却很好用,推荐给大家。
文章最后给大家介绍三个我自己写的在线文档:
第一个文档:PyCharm 中文指南 1.0 文档
花了两个多月的时间,整理了 100 个 PyCharm 的使用技巧,为了让新手能够直接上手,我花了很多的时间录制了上百张 GIF 动图,有兴趣的前往在线文档阅读。
第二个文档:PyCharm 黑魔法指南 1.0 文档
系统收录各种 Python 冷门知识,Python Shell 的多样玩法,令人疯狂的 Python 炫技操作,Python 的超详细进阶知识解读,非常实用的 Python 开发技巧等。
第三个文档:Python 中文指南 1.0 文档
花了三个月时间写的一本 适合零基础入门 Python 的全中文教程,搭配大量的代码案例,让初学者对 代码的运作效果有一个直观感受,教程既有深度又有广度,每篇文章都会标内容的难度,是基础还是进阶的,可供读者进行选择,是一本难得的 Python 中文电子教程。
来源:https://blog.csdn.net/weixin_36338224/article/details/114915462


猜你喜欢
- 环境:python3 + unittest + requestsExcel管理测试用例,HTMLTestRunner生成测试报告测试完成后邮
- Pycharm运行时总是跳出Python Console最近运行程序的时候发现,每次点击运行之后,都是出现的Python Console。最
- 前言深度神经网络是一种目前被广泛使用的工具,可以用于图像识别、分类,物体检测,机器翻译等等。深度学习(DeepLearning)是一种学习神
- 组件值校验,即在组件值变化时判断是否满足校验逻辑,若不满足校验逻辑,可以拿到校验错误信息进行错误提示或其他逻辑处理。声明 valueVali
- asp代码 <% Dim Rs,Conn Set Conn=Server.CreateObject("Adodb.Conne
- 扩展名在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名。下面是几种扩展名的用法。pypy就是最基本的源码扩展名
- 表单内有两个提交按钮,要实现当点击不同的提交按钮时,分别进行两个不同的处理过程,在这里有实现表单多按钮提交action的处理方法分享给大家。
- 生成Fiboncci Fn数有Θ(1),Θ(n)甚至指数级的算法,不过有Θ(log n)的吗?告诉你,有。首先,关于Fibonacci数,有
- 前言在前两篇文章中都使用HttpRequest这个http包来做api的请求然后github上面还有一个更有名,星星更多,社区也更活跃的ht
- 一、配置Git:1、对于首次安装git的机器,一定要首先进行用户账户信息的配置:git config --global user.name
- gojson是快速解析json数据的一个golang包,你使用它可以快速的查找json内的数据安装 go get github.com/wi
- 机器学习可应用在各个方面,本篇将在系统性进入机器学习方向前,初步认识机器学习,利用线性回归预测波士顿房价;原理简介利用线性回归最简单的形式预
- 一提到python,大家经常会提到爬虫,爬虫近来兴起的原因我觉得主要还是因为大数据的原因,大数据导致了我们的数据不在只存在于自己的服务器,而
- 本文实例讲述了PHP调用全国天气预报数据接口查询天气。分享给大家供大家参考,具体如下:基于PHP的聚合数据全国天气预报API服务请求的代码样
- 前言:我们先定义一个test01.py的文件。test01.py中代码如下所示:def step():print(__name__) &nb
- 安装 iupdatable 包pip install iupdatableTimer类主要函数:获取 Unix 时间戳(精确到秒):time
- 建表CREATE TABLE `map` ( `id` int(11) NOT NULL, `address` varchar(255) N
- 创建游戏文件 2048.py首先导入需要的包:import cursesfrom random import randrange, choi
- python 实现单例的方法第一种方法:使用基类New 是真正创建实例对象的方法,所以重写基类的new 方法,以此保证创建对象的时候只生成一
- 有这样一张表,表数据及结果如下:school_idschool_nametotal_studenttest_takers1239Abraha