9.10 【调试技巧】报错后直接切换pdb调试 ====================================== 前面的文章里介绍了两种 pdb 的调试入口,也是大部分所熟知的。 这里再带大家回顾一下 **第一种**\ :指定 ``-m pdb`` 来开启 .. code:: python $ python -m pdb pdb_demo.py **第二种**\ :使用 ``pdb.set_trace()`` 在代码中设置断点 .. code:: python import pdb pdb.set_trace() 但其实,pdb 还另外两种调试方法,第一种方法,可能有 99% 的开发者都没用过,甚至连见过都没有。 这两种方法,是配合 Python Console 的交互界面来实现的。 首先我准备好一个名为 ``utils.py`` 的 Python文件,里面定义了一个 sum 的工具函数(仅作演示用)。 .. code:: python def sum(*args): result = 0 for arg in args: result += arg return result 然后在终端敲入 Python 进入 Console 的模式,导入这个模块,并调用 sum 函数,在正常情况下,函数可以正常工作。 .. code:: python >>> import utils >>> utils.sum(1,2,3) 6 但如果你的参数类型传成了 str,函数就会报错啦~ .. code:: python >>> utils.sum(1,2,"3") Traceback (most recent call last): File "", line 1, in 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.pn()``\ ,就可以切换到熟悉的 pdb 调试界面,并在抛错的地方打上断点,然后你就可以任意的查看运行时的变量信息。 .. image:: http://image.iswbm.com/20210314164424.png 如果你不是想等报错了再调试,而是一开始就想进入调试模式,可以使用 ``pdb.runcall()`` 函数 .. image:: http://image.iswbm.com/20210314170221.png 有的同学可能还会想到 ``pdb.run()`` 和 ``pdb.runeval()`` 这两个函数,但这两种方法,是需要提前在函数调试断点的,这就比较麻烦了,一般情况下不推荐使用。 综上所述,今天 给大家介绍了两种新的 pdb 调试入口: 1. ``pdb.pm()``\ :在出错后直接切换到调试模式,并定位到报错位置。 – **今天的重点** 2. ``pdb.runcall()``\ :可以在不设置断点的情况下,直接调试代码片段。