优秀开发者必备技能包:Python调试器
作者 | Roky0429
来源 | Python空间(ID:Devtogether)
人工智能的现状及今后发展趋势如何?
https://edu.csdn.net/topic/ai30?utm_source=csdn_bw
写在之前
不管是之前搞 acm 用 c/c++ 写算法还是后来用 Python 写代码,我发现在程序出现问题的时候,大多数人习惯性的用 print 函数打印变量值这种方法来试图找出问题的症结所在,这种查找问题的方式低效到让人只想删掉代码重新去写。我记得一些人问我问题的时候,我不止一次的推荐过让他们用单步调试去找代码中存在的问题,但是更多收获的是「什么是单步调试」这种疑问,其实单步调试就是,自己去 Google 好么?
究其源头还是很多人没有意识到「调试程序」的重要性,或者根本不知道这个概念。调试程序是所有开发人员必须具备的一项重要技能,它可以让我们一步一步的看到程序的运行过程,帮助我们准确的找到程序中的错误。当然这里我们还是以 Python 为例来说「调试程序」。
也许会有人说我现在就写一些短的代码,好像也不用这么麻烦的去调试程序。如果你只是准备写一辈子短代码,那你确实不用,但是如果你以后一步步的想去做项目了,随着代码量的增加,逻辑的复杂,如果你还是硬撑着用 print 去解决问题,那么恭喜你,你可能加班加到头发光光也不一定能找到问题在哪。所以我希望大家能在一开始就走在正确的道路上,只要稍微花点时间去学习就能掌握的技能为什么要当作视而不见呢?植发很贵的!
现在很多的编辑器其实都带着「调试程序」的功能,比如写 c/c++ 的 codeblocks,写 Python 的 pycharm,这种图形界面的使用和显示都相当友好,简单方便易学,这个不是我这篇文章要讲的重点。今天主要是想给大家介绍一下 「Python调试器」,快速定位各种疑难杂症。
Python 调试器
这一部分主要就是想说两个 Python 调试器,分别是标准库自带的 pdb 和开源的 ipdb。
pdb
pdb 是 Python 自带的库,为 Python 提供了一种交互式的源码调试功能,包含当前调试器应有的功能,包括设置断点、单步调试、查看源码等。其实如果你之前学过 c/c++ 的话,你可能知道 gdb 这个命令行调试工具,如果你之前用过 gdb,那么恭喜你你可以直接用 pdb 了,因为这哥俩一个用法。如果你不知道 gdb 也没事,我们先来看一下 pdb 的部分调试命令(截图来自脚本之家):
这里有两种不同的方法来启动 Python 调试器,两种方法适用于不同的场景。一种是直接在命令行参数指定使用 pdb 模块启动 Python 文件,这种适合于代码文件较短的情况,将在代码的第一行启动 Python 调试器。具体如下所示(例如文件名是 test.py):
python -m pdb test.py
另一种是在 Python 代码中调用 pdb 模块的 set_trace 方法设置一个断点,当程序运行到此断点的时候,程序将会暂停执行并且打开 pdb 调试器,这种适合于代码文件较大的情况。具体如下所示:
import pdb
def get_sum(n):
cnt = 0
for i in range(n):
pdb.set_trace()
cnt += i
print(cnt)
if __name__ == '__main__':
get_sum(5)
启动 Python 调试器以后就可以使用上面截图中的调试命令进行程序的调试。比如在接下来的操作中,我们先使用 list 来查看我们的代码,然后使用 p 打印变量当前的取值,最后用 n 执行下一行 Python 代码:
ipdb
ipdb 是一个开源的 Python 调试器,其实它和 pdb 的接口是一样的。那既然一样的接口,那为啥还要设计个 ipdb 呢?黑格尔曾经说过「存在即合理」,ipdb 相比于 pdb 多了语法高亮,tab 自动补全等友好功能,在易用性方面做了很大的改进,这个感觉就和 Python 和 IPython 一样。
当然,ipdb 作为一个第三方库,在使用之前必然要先安装:
pip install ipdb
我们修改一下之前例子中的 test.py 文件,修改之后的代码如下:
import ipdb
def get_sum(n):
cnt = 0
for i in range(n):
ipdb.set_trace()
cnt += i
print(cnt)
if __name__ == '__main__':
get_sum(5)
具体的操作还是和上面的 pdb 的操作一样:
你看,上面带了点儿高亮,是不是顺眼了很多?还不赶紧去试试。
(本文为AI科技大本营转载文章,转载请联系原作者)
60s测试:你是否适合转型人工智能?
https://edu.csdn.net/topic/ai30?utm_source=cxrs_bw
群招募
扫码添加小助手微信,回复:公司+研究方向(学校+研究方向),邀你加入技术交流群。技术群审核较严,敬请谅解。
推荐阅读:
2018 Python开发者大调查:Python和JavaScript最配?
十大经典排序算法动画与解析,看我就够了
访问量最高超7百万的Stack Overflow问题竟然是...
算法警告!该图片涉嫌违规不予显示
交易机器人春天已来?先看完这篇再说吧
30 秒?!Chrome 插件带你速成编程学习 | 程序员硬核评测
为什么程序员下班后只关显示器从不关电脑?
全面剖析企业私有云
月入5万,程序员夫人们过上"贵妇"生活了吗?
点击“阅读原文”,查看历史精彩文章。
相关文章:

【Qt】dumpbin详解
dumpbin简介 DUMPBIN是在Windows平台下用于显示COFF格式文件信息的一个命令行工具。你可以使用DUMPBIN去显示COFF格式的文件信息,比如像vc编译器生成的目标文件(obj),可执行文件(exe)和动态链接库…

感悟Windows7
Win7已经逐渐在中国电脑用户中普遍起来,绝大多数人对其新增的功能很升级的功能都很是好评,接下来就将简略总结一下我对此系统使用的一些感想。 l 界面更加体现以人为本的思想。更加赏心悦目并且选择更加多元化。比如桌面小工具就有了更多的选择并且还可…

【Qt】Qt5在ubuntu16.04无法输入中文解决方式
参考博客 https://blog.csdn.net/linux_2016/article/details/52356576 博客中没有修改库的执行权限 解决方法 安装:fcitx-frontend-qt5 sudo apt-get install fcitx-frontend-qt5 拷贝动态库到Qt安装目录下的两个目录中 cp /usr/lib/x86_64-linux-gnu/qt5/p…

拿下中科大的计算机课程全靠它了!
整理 | 琥珀 出品 | AI科技大本营(ID: rgznai100) 人工智能的现状及今后发展趋势如何? https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw 中国科学技术大学,简称“中科大”,是国内有名的 985、211 重点高校。近年…

【阿里Q3财报:阿里云去年营收破百亿,亚洲市场遥遥领先】
2月1号晚间,阿里巴巴公布2018财年第三季度财报,阿里云保持持续强劲的增长,季度营收同比增长104%到35.99亿元。2017年累计营收突破百亿,达112亿,这是国内首次出现百亿规模的云计算服务商,在亚洲市场遥遥领先…

“神仙”打架,“凡人”遭殃
神仙是啥?古时神话时代举手翻江倒海的人物啊,那神仙打架是啥后果,相信大家心里都有个底吧。那现代社会的“神仙”是啥?那就是有钱有权的大人物或者商家,那真是让咱仰望的对象啊~ 话说最近这360跟QQ的巅峰对决&am…

120种小狗图像傻傻分不清?用fastai训练一个分类器
作者:一杯奶茶的功夫 链接:https://www.jianshu.com/p/ab35ed21df87 程序员转行学什么语言? https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw 这篇文章会讲解如何制作能够分类120种小狗的图像分类器。 这篇文章中所讲述的内容都是基于…

View_01_LayoutInflater的原理、使用方法
View_01_LayoutInflater的原理、使用方法 本篇博客是郭神博客Android视图状态及重绘流程分析,带你一步步深入了解View(一)的读书笔记的笔记。 LayoutInflater简单介绍 setContentView()内部是使用LayoutInflater来完毕载入布局的。setContent…

【ubuntu】在ubuntu下无法输出拼音输入法中的中括号“【” 和 “】”的解决方法
问题 在新装的ubuntu16.04中,打不出中括号【】,而变成 “”和“「” 解决方法 修改文件/usr/share/fcitx/data/punc.mb.zh_CN sudo vi /usr/share/fcitx/data/punc.mb.zh_CN将18、19行改为如下内容 18 [ 【 19 ] 】

配置数据源和分页
1.tomcat的版本,最好不要是安装版的,要解压缩的,不然无法连接数据源。2.conf》context.xml<Resource name"hotel" auth"Container" type"javax.sql.DataSource" driverClassName"oracle.jdbc.…

售价1万7的华为Mate X很贵吗?
整理 | 琥珀 出品 | AI科技大本营(ID: rgznai100) 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_sourcecxrs_bw 继三星之后,网友们期待已久的华为终于忍不住宣布了一系列重磅消息ÿ…

【C】数组数组初始化总结
C数组初始化总结 发现一个新方法,可以分段初始化数组 eg:int arrayC[MAX_LEN] {[1 … 5]9, [6 … 9] 8}; 代码如下 #include <stdio.h> #define MAX_LEN 10int main (int argc, char *argv[]) { //不初始化,参数值随机分配 //[0][0…

Golang的反射reflect深入理解和示例
[TOC] Golang的反射reflect深入理解和示例 【记录于2018年2月】 编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representati…

如何读取多个文件,文件后缀名不一致,不过类似source.1 source.2 source.3等
#include <stdio.h> #include <stdlib.h> //为了使用exit() char *itoa(int num,char *str,int radix); int main() { int ch; FILE* fp; // char fname[50]"scan1.source.2100"; //用于存放文件名 char fname[20]"source."; …

AtCoder Petrozavodsk Contest 001
第一场apc,5H的持久战,我当然水几个题就睡了 A - Two Integers Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement You are given positive integers X and Y. If there exists a positive integer not greater than 1018…

【Qt】使用QCamera获取摄像头,并使用图像视图框架QGraphics*来显示
代码下载 https://download.csdn.net/download/u010168781/10373174 #####头文件 #ifndef CAMERATEST_H#define CAMERATEST_H#include <QMainWindow> #include <QGraphicsView> #include <QKeyEvent> #include <QTimer>namespace Ui { class Camera…

CVPR 2019收录论文ID公开,你上榜了吗?
整理 | 琥珀 出品 | AI科技大本营(ID: rgznai100) 计算机视觉和模式识别大会 CVPR(Conference on Computer Vision and Pattern Recognition)作为人工智能领域计算机视觉方向的重要学术会议,每年都会吸引全球最顶尖的…

什么是 prelink
2019独角兽企业重金招聘Python工程师标准>>> Most programs require libraries to function. Libraries can be integrated into a program once, by a linker, when it is compiled (static linking) or they can be integrated when the program is run by a load…

PythonR爬取分析赶集网北京二手房数据(附详细代码)
本文转载自数据森麟(ID:shujusenlin) 作者介绍:徐涛,19年应届毕业生,专注于珊瑚礁研究,喜欢用R各种清洗数据。 知乎:parkson 如何挑战百万年薪的人工智能! https://edu.csdn.net/t…

【Qt】QCloseEvent的使用小结
问题描述 在程序中使用QCloseEvent时,有时没有反应,没有关闭程序。 原因 经测试只有在界面起来以后,使用event->accept()才能关闭程序 测试如下 在构造函数中调用close() 在构造函数中调用close()时,会触发QCloseEvent事件,但是程序界面没有关闭。 使用按钮触发…

Java反射 - 私有字段和方法
尽管普遍认为通过Java Reflection可以访问其他类的私有字段和方法。 这并不困难。 这在单元测试中可以非常方便。 本文将告诉你如何。 访问私有字段 要访问私有字段,您需要调用Class.getDeclaredField(String name)或Class.getDeclaredFields…

.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)
过去几年都在忙着找项目,赶项目,没有时间好好整理深究自己在工作中学到的东西。现在好了,趁着找工作的这段空余时间,正好可以总结和再继续夯实自己的.Net, C#基本功。在05年的时候,Scott Hanselman(微软的一个Principa…

一个小小的AI训练营竟然卧虎藏龙
年前,我来到了一个近墨者黑的地方,黑的不能再黑。。。这个神秘的组织叫做 21 天入门机器学习训练营。讲真的,当初报名这个训练营,我是冲着机器学习来的,主要是好奇想转型,而且听说这个课程对小白很友好&…

【Qt】QCamera查询和设置摄像头的分辨率
查询和设置摄像头分辨率的API QCamera::supportedViewfinderResolutions() QCamera::setViewfinderSettings() 设置摄像头帧率、比例、分辨率、格式的类:QCameraViewfinderSettings 使用注意事项 查询和设置摄像头分辨率时,需要在摄像头启动后调用&a…
附录G Netty与NettyUtils
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beliefer/article/details/77450134 注:本文是为了配合《Spark内核设计的艺术 架构设计与实现》一书的内容而编写,目的是为了节省成本、方便读者查阅。…

grails日志系统的研究
对于grails的日志输出,我真的是给弄吐血了。开始以为很简单,后来发现grails封装log4j做的有点太多了,很多东西的封装理解了觉得还挺合理,但是不理解的话真是无比迷茫。对于是否有必要做这么多强制性约束,我保留意见...…

给老婆写个Python教程
作者 | 水风 来源 | 水风知乎问答 如何挑战百万年薪的人工智能! https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw 什么是code code就是一种语言,一种计算机能读懂的语言。计算机是一个傻逼,他理解不了默认两可的任何东西。比如…

SpringBoot的修改操作
今天学习SpringBoot 的 CRUD 操作,练习 修改操作 时,发生了如下的异常: [nio-8080-exec-7] .m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.dao.InvalidDataAccessApiUsa…

【Qt】QImage、QPixmap、QBitmap和QPicture
简述 Qt 提供了四个用于处理图像数据的类: QImage、 QPixmap、 QBitmap和QPicture。QImage是为 I/O 设计和优化的, 用于直接像素访问和操作, 而QPixmap是为在屏幕上显示图像而设计和优化的。QBitmap继承自QPixmap,用在位深为1(黑白图片)上。…

ASP.NET,IIS7.0 上传大视频文件报错
一、问题概述: 最近开发上传视频文件的功能。基本流程已经跑通了,可是上传30M以上的文件时就会报错。 二、资料海洋瞎扑腾 从网上查了一些资料,一般都是下面这种说法: 看着步骤倒是也不算繁琐,可是本人照着步骤做了却没…