如何进行Python 调试器调试

Python012

如何进行Python 调试器调试,第1张

本文首先介绍一下

Python 调试器

的历史,总结了Python的强大之处和不足并且指出了与其他脚本语言,相比,以及Python语言与其他语言的优势所在,下面进行学习介绍说明。

PyDev 就能显示出一个超链接,这样您可以在导入库或函数的源代码之间导航。请注意,为了在您自己的源代码中跨模块使用该特性(从一个模块链接到另一个模块),必须修改PYTHONPATH 环境变量。

在其中加入这些模块,这样 PyDev 就可以找到它们了。

Python 调试器

是最近才加入 PyDev 插件中的。要使用调试器,可在Python编辑器中想中断的代码行的左侧点击,设置断点。

我在 feedparser.py 的 1830 行处设置了断点。然后在 Navigator 视图中选择这个Python模块,点击右键,选择“PythonDebug...”。这时将显示与前面相似的一个启动配置窗口。点击 Debug 进入 Debug 视角,同时启动调试器。 左上角的 Debug 视图显示当前正在执行的进程和线程,右上角的 Variables 视图显示当前运行域中的所有变量。

Python编辑器会显示调试器目前停在哪条语句上,同时所有的输出信息都显示与 Console 视图中。调试器可以通过 Debug 视图底部的按钮或 Run 菜单进行控制。 要运行刚刚在 Eclipse 中创建的启动器,可选择 Run External ToolspythonInterpreter。

Python解释器的输出显示在 Console 视图中。

使用VSCode调试Python时,在终端中会显示执行过程的命令信息(如下图),感觉眼花缭乱,可以配置"launch.json"内容,不显示这些执行过程信息,只显示代码结果。

工具/原料

安装好的VSCode和Python插件

安装好的Python

方法/步骤

点击左侧【调试】按钮(小甲壳虫图标),查看界面左上方当前使用的调试配置名称。记住这个名称,一会"launch.json"配置文件中用得到。如下图,当前使用的是“Python: Current File”。

点击旁边的齿轮图标,显示"launch.json"配置文件的内容,找到第一步中使用的配置名称项,如下图:

将该项最后"console"值设置为“none”如下图。如果没有"console"项,则手动输入:"console":"none",注意与上一项之间,要有逗号间隔开,不要遗漏。如下图。修改完后,记得保存。最后再重新调试,就只显示运行结果了。

END

注意事项

修改"launch.json"配置文件中的调试项名称要与当前使用的调试项名称一致

添加"console":"none"后,注意与前一项之间要有逗号间隔

我的解决方案:用浏览器打开 txt文本,复制。在vscode或者任意编辑器下新建文件,粘贴保存即可。

下面是对txt文本的预处理,将全部文本分为120章节,保存为csv文件,代码如下:

简单解释: 首先读取全部文本,用正则表达式reg匹配章节,切分章节回, 去除内容小于200字的章节,最后为120章节,保存为csv文件。 提示:在spilt过程中,章节内容中也会出现匹配情况,全本搜索找到内容中的相关匹配项,删除即可。

首先是读取csv文件。 下面使用python的第三方库jieba分词, 基于tf-idf算法进行关键字提取。

tf-id:阮一峰

对该算法的理解可以参考上述博客,大概有3篇文章, 简单易懂。

简单解释: 第3行:使用算法对每个章节中最关键的1000个词进行关键词提取。 第4行:由于后续处理词向量的格式时空格加关键词, 所以进行简单转换。

输出如下:

下面使用sklearn中的CountVectorizer对上述提取的关键词生成词向量。

python代码实现可以参考我之前写的博客 机器学习之贝叶斯分类

其中简单介绍了如何构建词集或者词袋模型,生成词向量。

代码如下:

简单解释: 首先生成5000个特征的vertorizer, 对vorc进行训练转换, 得到120个词向量。

接着转为array形式,进行聚类。

这里做个假设:假定红楼梦前后不是一个人所写,那么用词方面也会有区别。通过聚类算法,如果得到的结果有明显的界限, 那么可以进行初步判断。下面是我的可视化过程: 代码如下:

简单解释:首先使用kmeans聚类算法,k=2分为两类,打印其类别。基于先前的假设,后四十回为高鹗缩写,因此在80回有明显的区分。 下面看结果:

可以看到前80回和后四十回有明显的区分,为了加强验证,可以将k设为不同的值,进行横向对比。 如下:

可视化结果如下:

简单解释:

k分为为3, 4, 5, 6 ,7, 8。 首先查看第一图, 每一行的点表示分为同一类 ,可以看到同三类。可以看到后四十回中有少量的章节被分为0,2类,但是大部分还是归为一类,这就表示后十四回的行文风格与前80回有不同。 第二图是分为4类的情况,后面也基本得到类似的情况。 基于以上分析及横向比较,可以初步推断前80回合和后80回不是同一个人所写。

提出疑问:是否因为情节的变化,导致用词习惯,频率有所差异。 这里使用其他两部名著三国演义和水浒传来做个纵向对比。文本预处理,词向量生成都是一样的。具体可看我写的代码。最后的可视化结果如下: 首先是三国演义:

还是按照上面的分析:第一幅图中大概前83回与后面内容不一样。随着k的变化,比如k为4, 5, 6, 8, 部分章节前后章节无法做出明显的区分,因为初步判断为同一人所写。

水浒传的结果:

可以做自己的判断。