没想到代码还能这么调试,这么多年 Python 白玩了

关于代码调试的技巧,我以前写过不少的文章,加起来也有 将近 10 篇了,关注比较早的同窗,也应该都有看过。html

还没看过的同窗,欢迎前往查阅:第九章:调试技巧python

其中有一篇是关于 pdb 的调试技巧的:markdown

里面介绍了两种 pdb 的调试入口,也是大部分所熟知的。函数

这里再带你们回顾一下工具

第一种:指定 -m pdb 来开启oop

$ python -m pdb pdb_demo.py
复制代码

第二种:使用 pdb.set_trace() 在代码中设置断点学习

import pdb

pdb.set_trace()
复制代码

但其实,pdb 还另外两种调试方法,第一种方法,可能有 99% 的开发者都没用过,甚至连见过都没有。ui

这两种方法,是配合 Python Console 的交互界面来实现的。spa

首先我准备好一个名为 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 调试方法主要有六种:

  1. python -m pdb:运行 python 文件时直接进入调试模式
  2. pdb.set_trace():事先设置断点,而后直接运行 python 文件
  3. pdb.run():事先设置断点,而后直接运行 python 模块
  4. pdb.runeval():事先设置断点,而后直接运行 python 模块(与 pdb.run 相似)
  5. pdb.pm():在 Console 模式下出错后直接切换到调试模式,并定位到报错位置。
  6. pdb.runcall():能够在不设置断点的状况下,直接调试代码片断。

其中,pdb.pm() 是本文的重点,他虽然冷门,但却很好用,推荐给你们。

以上就是我今天的分享,但愿对你有用,若是你也有好用的调试小技巧,欢迎留言分享,互相学习。


文章最后给你们介绍三个我本身写的在线文档:

第一个文档PyCharm 中文指南 1.0 文档

花了两个多月的时间,整理了 100 个 PyCharm 的使用技巧,为了让新手可以直接上手,我花了不少的时间录制了上百张 GIF 动图,有兴趣的前往在线文档阅读。

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

系统收录各类 Python 冷门知识,Python Shell 的多样玩法,使人疯狂的 Python 炫技操做,Python 的超详细进阶知识解读,很是实用的 Python 开发技巧等。

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

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

相关文章
相关标签/搜索