Python调试技巧

我用的是Python 2.7.8.

1. 设置断点, 查看对象的属性和值

在任意想设断点的语句前面加上这两行:

import pdbpdb.set_trace()

如果没有被Exception打断的话,程序执行到这里会停下,这时候可以用‘n’或‘next’执行下一行语句,用‘s’或‘step’进入一个函数内部,用‘w‘或’where‘看一下调用栈也就是我在哪里,用’l’或‘list’查看断点处的10行语句,用‘变量名’或‘print 变量名’ 查看一个对象。Python里一切都是对象,一个对象(object)有很多属性,用‘dir(变量名)’查看一个对象的所有属性,用’vars(变量名)’或’变量名.__dict__’查看一个对象的所有属性和值,如果想让格式漂亮点:

for k,v in objectName.__dict__.iteritems():    print k, ': ', v

犀利之处在于可以指定条件来设断点:

if condition1 and condition2:    import pdb    pdb.set_trace()

__file__属性很有用,可以去对象的源文件看看代码。类型是instancemethod的对象没有__file__属性,可以用__func__.func_code来看看该方法的源码在哪里。

2. 查看traceback, 也就是哪里出错了

一般Python遇到exception会给出详细的traceback信息,即函数A第m行调用函数B,函数B第n行调用函数C,函数C第k行有exception没处理,就在这里出错了。但有时候改别人的Python程序,可能Exception都被笼统地处理为一个错误信息然后输出,没给出traceback,这时候在可疑代码周围加几行就能显示traceback了:

import tracebacktry:    我认为最可能出错的那段代码except:    print traceback.format_exc()

?

以上技巧就足以对付我日常遇到的Python bug了,欢迎留言:-)

Python调试技巧

相关文章:

你感兴趣的文章:

标签云: