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 调试界面,并在抛错的地方打上断点,然后你就可以任意的查看运行时的变量信息。

Python代码调试技巧教程详解

如果你不是想等报错了再调试,而是一开始就想进入调试模式,可以使用 pdb.runcall() 函数

Python代码调试技巧教程详解

有的同学可能还会想到 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 动图,有兴趣的前往在线文档阅读。

Python代码调试技巧教程详解

第二个文档:PyCharm 黑魔法指南 1.0 文档

系统收录各种 Python 冷门知识,Python Shell 的多样玩法,令人疯狂的 Python 炫技操作,Python 的超详细进阶知识解读,非常实用的 Python 开发技巧等。

Python代码调试技巧教程详解

第三个文档:Python 中文指南 1.0 文档

花了三个月时间写的一本 适合零基础入门 Python 的全中文教程,搭配大量的代码案例,让初学者对 代码的运作效果有一个直观感受,教程既有深度又有广度,每篇文章都会标内容的难度,是基础还是进阶的,可供读者进行选择,是一本难得的 Python 中文电子教程。

Python代码调试技巧教程详解

来源:https://blog.csdn.net/weixin_36338224/article/details/114915462

标签:Python,代码调试
0
投稿

猜你喜欢

  • ASP如何跳出本次进入下一次循环

    2008-10-23 13:46:00
  • mysql UNIX时间戳与日期的相互转换

    2010-02-10 12:10:00
  • IE里模拟DOMContentLoaded事件

    2008-08-05 17:12:00
  • 如何利用Fabric自动化你的任务

    2023-02-25 12:37:04
  • Python利用pandas处理Excel数据的应用详解

    2022-02-08 16:25:02
  • python脚本监控Tomcat服务器的方法

    2023-10-03 18:19:23
  • 跟老齐学Python之集合的关系

    2023-02-04 22:32:27
  • SQL Server索引管理的六大铁律

    2009-03-25 14:05:00
  • FrontPage2002简明教程五:css样式表的应用

    2008-09-17 11:31:00
  • 基于Python搭建人脸识别考勤系统

    2021-07-08 10:17:42
  • PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解

    2023-10-15 01:41:57
  • Python并发编程实例教程之线程的玩法

    2022-02-02 08:17:41
  • 编写兼容IE和FireFox的脚本

    2009-05-19 12:01:00
  • Flash连接服务器

    2008-06-15 07:19:00
  • Python绘图Matplotlib之坐标轴及刻度总结

    2023-10-01 15:56:39
  • 利用Python为iOS10生成图标和截屏

    2021-05-03 11:15:09
  • Python写代码的七条重要技巧介绍

    2023-09-14 06:04:07
  • Python使用爬虫爬取贵阳房价的方法详解

    2022-12-01 09:55:25
  • W3C web标准概念入门

    2008-05-25 15:06:00
  • Python获取任意xml节点值的方法

    2023-03-09 01:40:07
  • asp之家 网络编程 m.aspxhome.com