[python]进阶学习之阅读代码
起因
最近在公司的任务是写一些简单的运营工具,因为是很小的工具,所以就用了github上面的一个开源项目flask-admin,可以省去很多的事情。
但是,这个开源项目是个人维护的项目,所以文档相对简单,网上的资料相对较少,遇到一些产品经理要求具体功能并不能直接通过文档和例子中的代码找到答案。所以,我只能通过阅读源代码,重写相关类以及方法实现了具体的需求。在这个过程中,学习到了一些东西,同时整理了自己以前的一些收获,然后分享给大家,有不对的地方还望海涵、指正。
阅读代码有助于处理bug
阅读代码是一项更重要的技能,在大学编程语言的考试中也有相关的考察——代码填空、代码查错。在工作中用到的地方更多:
- 查找bug
- 参与到已有的项目
- 接手别人的工作
- 开源项目的二次开发
python是解释性语言,不需要反编译就可以看到源代码,利于查找bug。在找bug的时候,最重要的是定位bug的位置,比较直观的bug是通过阅读异常可以定位到bug的位置。而有的异常信息,例如:AttributeError: 'NoneType' object has no attribute 'get'
会让你觉得很费解,因为你本以为这个肯定有值,怎么就是None了呢?这个时候,你可以在异常定位的位置前面,把这个object的值打印出来,重新调试。察看这个值到底是什么,然后一步步的向上找到,是什么地方操作了这个对象使得它的值为None,造成了这个异常(当然也可以使用通过ide调试模式进行排查,本文重点是阅读代码,所以就不介绍 打断点决解bug的方法 了)。
综合上面的讲的:阅读代码,定位到问题的位置,然后打印出来!这样有利于分析问题,解决问题。
为什要先说这个技能,因为当我们用一个我们不熟悉、文档不完全的库、类、方法或者函数的时候,通常会遇到问题,通过上面的方法,定位到问题,通过输出值,阅读代码。退后推敲出问题的原因,就可以很快的找到解决办法。当然,这个方法也不是什么bug能够解决的,但是通过上面的方法尝试解决不成功后,再拿着这个bug去问别人的时候,就可以具体到某个方法,精确的提问。大家的时间都很宝贵,如果你提出一个泛泛的问题、没有自己尝试解决过的问题,那么谁也无法给你一个好的解答(提问的智慧。同时可以减少被批评的次数。。。。
[python]进阶学习之阅读代码的更多相关文章
- Python进阶学习之特殊方法实例详析
Python进阶学习之特殊方法实例详析 最近在学习python,学习到了一个之前没接触过的--特殊方法. 什么是特殊方法?当我们在设计一个类的时候,python中有一个用于初始化的方法$__init_ ...
- python进阶学习笔记(一)
python进阶部分要学习的内容: 学习目标: 1.函数式编程 1.1,什么是函数式编程 函数式编程是一种抽象计算的编程模式 不同语言的抽象层次不同: 函数式编程的特点: python支持的函数式编程 ...
- 魔法方法推开Python进阶学习大门
热爱Python Python是Guido van Rossum设计出来的让使用者觉得如沐春风的一门编程语言.2020年11月12日,64岁的Python之父宣布由于退休生活太无聊,自己决定加入Mic ...
- python进阶学习(二)
本节学习图形用户界面 ------------------------ 本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口.这里介绍wxPython : 下载地 ...
- python进阶学习(一)
同样是<python基础教程(第二版)>的内容,只是后面内容学起来,相比前面会比较有趣,也更加实用,所以,将"基础"改为"进阶". python 电 ...
- Python 标准库一览(Python进阶学习)
转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...
- Python进阶学习_连接操作Redis数据库
安装导入第三方模块Redis pip3 install redis import redis 操作String类型 """ redis 基本命令 String set(n ...
- python进阶学习笔记(四)--多线程thread
在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...
- python进阶学习(四)
在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...
随机推荐
- NTP时间同步
1.设置NTP相关服务开机自启: # chkconfig ntpd on # chkconfig ntpdate on # chkconfig |grep ntp 2.启动NTP服务: # servi ...
- Entity Framework搜索指定字段解决方案
public class Book { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; ...
- 使用XmlDataDocument将数据存储到XML文档
string str = "Data Source=192.168.1.20;Initial Catalog=WebTest;User ID=sa;Password="; SqlC ...
- nginx+winsw windows服务
1.下载Nginx:http://nginx.org/en/download.html 2.下载winsw配置包:http://files.cnblogs.com/files/objecttozero ...
- [C#进阶系列]专题一:深入解析深拷贝和浅拷贝
一.前言 这个星期参加了一个面试,面试中问到深浅拷贝的区别,然后我就简单了讲述了它们的之间的区别,然后面试官又继续问,如何实现一个深拷贝呢?当时只回答回答了一种方式,就是使用反射,然后面试官提示还可以 ...
- 修改nw.js的exe文件使其请求管理员权限
修改nw.js的exe文件使其请求管理员权限 默认情况下,nw.js发布的nw.exe文件请求的是普通权限,当我们的应用需要访问一些特殊目录或者注册表等,就需要程序启动的时候以管理员权限运行.那么此时 ...
- 《C#图解教程》读书笔记之一:C#和.NET框架
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.在.NET之前的编程世界 C#语言是在微软公司的.NET框架上开发程序而设计的,首先作者给大家纠正了一下C# ...
- 使用抓包工具SpyNet对你的网络进行监控
步骤1:下载并安装SpyNet Sniffer嗅探器之后,第一次运行SpyNet Sniffer后,将会弹出[Settings(设置)]对话框,在其中选择需要监听对象,如图所示. 步骤2:单击[Act ...
- DNS 正向查找与反向查找
原创地址:http://www.cnblogs.com/jfzhu/p/3996323.html 转载请注明出处 所谓正向查找,就是说在这个区域里的记录可以依据名称来查找对应的IP地址.反向查找就是在 ...
- ios UIView sizeToFit sizeThatFits
UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 50, 0, 0)]; testLabel.backgroundC ...