Python学习记录之(错误、调试和测试)
错误处理
# coding=utf-8
import logging
try:
print 1 / 0
# print 1 / int('a')
# print 1 / 2
except ZeroDivisionError, e:
logging.exception(e)# 记录错误
print "exception:", e
except ValueError, e:
print "exception:", e
raise SystemError('input error!')# 将错误转为另一种错误抛出
except Exception, e:
print type(e)
raise# 将错误原样抛出
else:# 没有错误时执行
print "no error"
finally:
print "finally"
常见的错误类型和继承关系看这里:
https://docs.python.org/2/library/exceptions.html#exception-hierarchy
调试
- 使用print
- 断言
assert n != 0, 'n is zero!'# 表达式不为 True 抛出 AssertionError ,附带后面的信息
- logging
import logging
logging.basicConfig(level=logging.NOTSET)
s = '0'
n = int(s)
logging.info('n = %d' % n)
print 10 / n
logging有debug,info,warning,error...等多个级别,级别定高了低级别的信息就不会输出,可以输出到console或是文件等
- pdb
python -m pdb err.py
进入调试模式,l 查看代码,n 单步执行,
p 变量名
查看变量,q 结束调试- pdb.set_trace()
import pdbs = '0'
n = int(s)
pdb.set_trace() # 运行到这里会自动暂停
print 10 / n
运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境,可以用命令p查看变量,或者用命令c继续运行
单元测试
- “测试驱动开发”(TDD:Test-Driven Development)
- 编写单元测试时,我们需要编写一个测试类,从unittest.TestCase继承。
- 以test开头的方法就是测试方法,不以test开头的方法不被认为是测试方法,测试的时候不会被执行。
-
assertEquals()
:
self.assertEquals(abs(-1), 1) # 断言函数返回的结果与1相等
- 另一种重要的断言就是期待抛出指定类型的Error,比如通过d['empty']访问不存在的key时,断言会抛出
KeyError
:
with self.assertRaises(KeyError):
value = https://www.it610.com/article/d['empty']
- 运行单元测试
(1)最简单的运行方式是在mydict_test.py
的最后加上两行代码:
if __name__ == '__main__':
unittest.main()
将测试当做脚本运行
(2)在命令行通过参数
-m unittest
运行- setUp与tearDown
这两个方法会分别在每调用一个测试方法的前后分别被执行。可以进行一些资源打开与关闭的操作
直接运行文档中的示例代码。文档注释一般在函数定义语句、类定义语句下一行开始,使用多行字符串的语法:
def abs(n):
"""
注释内容
"""
【Python学习记录之(错误、调试和测试)】模块中文档测试代码:
if __name__ == "__main__":
import doctestdoctest.testmod()
推荐阅读
- 20170612时间和注意力开销记录
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- 一起来学习C语言的字符串转换函数
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)