Python3(9)Python 错误、调试和测试

本系列主要学习Python的基本使用和语法知识,后续可能会围绕着AI学习展开。

Python3 (1) Python语言的简介

Python3 (2) Python语法基础

Python3 (3) Python函数

Python3 (4) Python高级特性

Python3(5) Python 函数式编程

Python3(6) Python 模块

Python3(7) Python 面向对象编程

Python3(8) Python 面向对象高级编程

对于编程来说,调试与处理bug占用的时间远远高于开发的时间。所以学会调试bug,分析bug , 解决bug 是编程的一个重要能力,想当初自己刚学java的时候,没人教过自己如何调试,在工作中摸索了小半年才真正的学会如何断点调试,如何分析、解决bug,调试其实各种语言大同小异,但是我觉得有必要专门来写,因为它非常重要。上一篇由于时间和篇幅原因,遗留下一个问题,如何设计框架?现在我们从这里说起。

设计 ORM 框架

上一篇介绍了python 面向对象高级编程,涉及到的内容非常的烧脑,讲到元类时,脑细胞已经不太够用了,为了少死点脑细胞,就把这个元类的应用:框架搁置了,我们从这里讲起,元类其实字面意思就是类的元老,有资格创建和修改类。

ORM全称“Object Relational Mapping”,即对象-关系映射,就是把关系数据库库的字段映射为一个对象,也就是一个类对应一个表。这样我们不必直接使用SQL语句,通过框架来进行映射,框架定义的类必须是动态的,使用者根据自己的表结构来定义自己需要的类。

输出结果:

这就是一个框架的基本原理代码,我们实现了一个插入的操作,执行流程:用户根据表的结构定义了一个User类,Python解释器在创建类时会查找是否存在元类,在类中找到元类,之后就去创建元类,元类会根据类的属性生成一个字典,在Model中根据字典创建各种方法去执行与数据库交互。最后就在类完全不知情的情况下生成了各种与数据库交互的方法。不必去执行各种 sql 语句,这就是一个典型的框架原理。

错误产生的情景

程序编写导致的问题,这个是程序员逻辑考虑不周全造成的。

用户交互导致的问题,没有按设计的规则进行交互。

程序运行时产生的问题,这个异常是硬件、网路等外在因素产生的问题。

Python中内置了一系列的处理错误的机制。是程序永远处于可控的状态。

错误处理

是python内置的错误处理机制。

输出结果:

python中与java中的使用规则是相同的。

包含的代码块如果发生异常,根据异常类型执行对应的代码,只要执行了语句,代码块就会被截住,不论下面是否还有异常,执行完语句,如果有就会执行,不是必须的。

含的代码块没有发生异常,如果有会执行语句,不是必须的,接着如果有就会执行,不是必须的。

可以进行嵌套。

错误类型及继承关系

错误栈

python 中错误也会一层层像上抛出,并且不需要像java 等语言通过来标识,它会自动向上抛出。如果代码层面没有处理,最后被Python解释器捕获,打印一个错误信息,然后程序退出。

输出结果:

如果我们在代码中进行错误捕获,我们会看到错误在中产生,但是在中捕获,错误进行向上的抛出,如果没有错误捕获,系统会打印出错误栈信息。并退出执行。如果使用我们也会打印出全部的错误栈信息。

自定义错误

python中的错误是一个个类的实例,创建并抛出的,所以我们也可以自定义自己的错误类型,并且手动抛出 关键字就是手动抛出异常。

输出结果:

根据自定义的错误,我们可以根据具体的业务逻辑,抛出自定义的错误信息。方便用户或者调用你的代码的人理解。

还可以将错误继续抛出,在中,使用 可以将错误原样抛出,也可以改变错误类型进行抛出。

调试

print

通过print 输出可能出错的变量,我们可以通过错误信息和print 输出的内容来进行修改bug,但是print在测试完成后还需要删除。

assert

断言的使用,就是我们在逻辑层面做的一个if判断相当于,如果中的是代码继续执行,如果是会打印出错误。断言可以通过来屏蔽。

logging

的使用与 android中的的使用时大同小异的,分为几种级别,方便过滤信息。logging可以输出到文件 如: 输出到文件中。

pdb

启动Python的单步调试器pdb,程序一行行执行。可以采用在代码中设置断点。

IDE断点调试

例如 PyCharm 我们可以打断点进行Debug模式下运行。

单元测试

单元测试就是将某一个模块 通过编写一个测试用例在测试。

文档测试

根据文档中注释的测试代码来进行测试。

最后总结一下 Python中错误、调试、测试 ,首先我们要清楚产生bug 的3种情景 程序逻辑问题,用户操作问题,硬件 、网络等外在因素问题,其次要知道Python 中有内置的错误处理机制 ,错误类型都继承自,接着我们可以通过几种方式来打印错误信息,在IDE 上可以通过断点来调试bug 。

参考

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431913726557e5e43e1ee8d54ee486bddc3f607afb75000

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180129A12VJA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券