Spyder调试python函数

记录一些简单的概念、用法、资源链接等。

1. 三个比较好的链接:

【1】python代码调试技巧 —- 结合例子讲解了利用pdb、PyCharm、PyDev和日志功能进行python代码调试的方法,语言简练、排版清晰。
【2】Spyder之Debugging调试简介 —- 要利用好IDE自带的tutorial和documentation。
【3】Python 程序如何高效地调试—-知乎上的问答,可以了解各种不同的思路和解决方案。

2. 概念

pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令。—-摘链接[1]

Spyder调试python函数_第1张图片

调试器是可扩展的 — — 它实际上被定义为类Pdb,目前没有文档,但容易通过读取源文件来理解,扩展接口使用模块bdb和cmd。调试器的提示符是(Pdb)。—-python文档

3. Spyder调试函数

记录一下当初的错误尝试,回想起来好傻。

Spyder调试python函数_第2张图片

点了开始调试,运行到定义函数所在的行时,点进入函数(step into),天真地想,Spyder这么牛啊,都不用传递参数就能进去调试,结果当然是直接跳过,进不去。

于是,在ndfs那个函数中设置了一个断点,在console中调用它,觉得这下应该没问题了。然而结果是,程序麻利儿地跑完了,根本不带停的…

Spyder调试python函数_第3张图片

还有其它奇怪的尝试… 比如以下两种:

图3

最后正解应该是,在原程序中加一行调用ndfs这个函数的代码,当运行到调用函数的这行代码时,再点进入函数时 ,就可以顺利进入函数内部调试,后续再单步什么的也妥妥的。

其它

NDFS[1]—-非负判别特征选择,是一种无监督的特征选择方法,上面的例子是该算法的python实现,收录于skfeature这个特征选择工具包。

在82行左右(计算拉普拉斯矩阵时),好像有一个小错误,此处待后续确认后再作相应说明。原代码是
L = np.array(W.sum(1))[:, 0] - W
我觉得应该是
np.diag( np.array( W.sum(1) ).reshape(-1) ) - W 或者
np.diag( np.array( W.sum(1) )[:,0] ) - W
( 另:np.reshape可换为np.flatten(),np.ravel() )

[1] Li Z, Yang Y, Liu J, et al. Unsupervised feature selection using nonnegative spectral analysis[C]. AAAI. 2012.

你可能感兴趣的:(开发环境)