python学习(十一)测试和调试
最近学习了python的错误处理和几种测试方法
1 try except
可以通过try except方式捕捉异常
try:
print('try...')
r = 10/0
print('result is :', r)
except ZeroDiversionError as e:
print('except is :', e)
finally:
print('finally ...')
print('END')
可以捕捉不同类型的错误,编写多个except
try:
print('try...')
r = 10/int('a')
print('result is: ', r)
except ValueError as e:
print('ValueError : ', e)
except ZeroDiversionError as e:
print('ZeroDivisionError is : ', e)
finally:
print('finally ...')
print('END')
try except同样支持else结构
try:
print('try... ')
r = 10/int('2')
print('result is : ', r)
except ValueError as e:
print('ValueError : ', e)
except ZeroDivisionError as e:
print('ZeroDivisionError is : ', e)
else:
print('no error')
finally:
print('finally ...')
print('END')
某个函数调用出现异常,在上层同样可以捕获到
def foo(s):
return 10/int(s)
def bar(s):
return foo(s) * 2
def main():
try:
bar('0')
except Exception as e:
print('Exception is : ', e)
finally:
print('finally...')
main()
2 logging
python 提供打日志方式输出异常,并且不会因为出现异常导致程序中断
import logging
def foo(s):
return 10/int(s)
def bar(s):
return foo(s) * 2
def main():
try:
bar('0')
except Exception as e:
logging.exception(e)
main()
print('END')
如果想要将异常处理的更细致,可以自定义一个异常类,继承于几种错误类,如ValueError等,在可能出现问题的地方将错误抛出来
class FooError(ValueError):
pass
def foo(s):
n = int(s)
if n == 0:
raise FooError('invalid error is : %s' %s)
return 10/n
foo('0')
错误可以一层一层向上抛,直到有上层能处理这个错误为止
def foo(s):
n = int(s)
if n==0:
raise ValueError('invalid error is: %s' %s)
return 10/n
def bar():
try:
foo('0')
except ValueError as e:
print('ValueError')
raise
bar()
logging可以设置不同的级别,通过basicConfig可以设置
import logging
logging.basicConfig(level=logging.INFO)
def foo(s):
n = int(s)
return 10/n
def main():
m = foo('0')
logging.info('n is : %d' %m)
main()
3 断言assert
大部分语言都支持assert,python也一样,在可能出错的地方写assert,会在异常出现时使程序终止
def foo(s):
n = int(s)
assert n != 0 ,'n is zero'
return 10/n
def main():
foo('0')
main()
4 pdb调试和set_trace
pdb调试用 python -m pdb 文件名.py, 单步执行敲n,退出为q
python 可以在代码里设置断点,在程序自动执行到断点位置暂停,暂停在set_trace的代码行
import pdb
def foo(s):
n = int(s)
pdb.set_trace()
return 10/n
def main():
m = foo('0')
main()
5 单元测试
先实现一个自己定义的Dict类,将文件保存为mydict.py
class Dict(dict):
def __init__(self, **kw):
super(Dict, self).__init__(**kw)
def __getattr__(self, key):
try:
return self[key]
except Exception as e:
raise AttributeError('AttributeError is :%s', e)
def __setattr__(self, key, value):
self[key] = value
  python 提供了单元测试的类,开发者可以继承unittest.Test实现特定的测试类,下面实现Dict的单元测试类,保存为unittestdict.py
import unittest
from mydict import Dict
class TestDict(unittest.TestCase):
def setUp(self):
print('setUp...')
def tearDown(self):
print('tear Down...')
def test_init(self):
d = Dict(a='testa', b = 1)
self.assertEqual(d.a, 'testa')
self.assertEqual(d.b, 1)
self.assertTrue(isinstance(d, dict))
def test_key(self):
d = Dict()
d['name'] = 'hmm'
self.assertEqual(d.name, 'hmm')
def test_attr(self):
d = Dict()
d.name = 'hmm'
self.assertEqual(d['name'], 'hmm')
self.assertTrue('name' in d)
def test_attrerror(self):
d = Dict()
with self.assertRaises(AttributeError):
value = d.empty def test_keyerror(self):
d = Dict()
with self.assertRaises(AttributeError):
value = d['empty'] if __name__ == '__main__':
unittest.main()
运行unittest.py可以检测mydict中Dict类是否有错误
6 文档测试
文档测试在代码中按照特定格式编写python输入和期待的输出,通过python提供的文档测试类,实现测试代码的目的
class Dict(dict):
'''
>>> d1 = Dict()
>>> d1['x'] = 100
>>> d1.x
100
>>> d1.y = 200
>>> d1['y']
200
>>> d2=Dict(a=1,b=2,c='m')
>>> d2.c
'm' '''
def __init__(self, **kw):
super(Dict,self).__init__(**kw)
def __getattr__(self,key):
try:
return self[key]
except KeyError:
raise AttributeError('AttributeError key is %s' %key)
def __setattr__(self,key,value):
self[key] = value
if __name__ == '__main__':
import doctest
doctest.testmod()
我的公众号谢谢关注:

python学习(十一)测试和调试的更多相关文章
- python学习笔记012——pdb调试
		1 描述 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能, 主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等 调 ... 
- python学习笔记之pdb调试
		之前一直说要学python可还是一直停留在看的层面,昨天大神手把书教我pdb调试,说要摆脱IDE集成开发环境编程,感激不尽,立一个flag,python一定要入门! 1.进入方式 1)windows ... 
- python django 基本测试 及调试
		#########20181110from django.db import modelsfrom blog.models import Article, Author, TagAuthor.obje ... 
- 使用Python学习selenium测试工具-4:查找元素
		转自:https://blog.csdn.net/wd168/article/details/51819930 web通常包含了Hyper Text Markup Language (HTML).Ca ... 
- Python学习--12 异常处理、调试
		异常捕获 语法格式: try: pass except xxx as e: pass except xxx as e: pass ... else: pass finally: pass except ... 
- python django 基本测试 及调试 201812
		#####20181225 1.python解决SNIMissingWarning和InsecurePlatformWarning警告在想要获取https站点的资源时,会报出SNIMissingWar ... 
- 【转】使用Python学习selenium测试工具
		出处:https://my.oschina.net/u/1433482/blog/633231?fromerr=vaxqh9bn 
- 转  Python3 错误和异常/ Python学习之错误调试和测试
		########sample 0 https://www.cnblogs.com/Simon-xm/p/4073028.html except: #捕获所有异常 except: <异常名> ... 
- python学习笔记(六)——程序调试
		在我们平时编写程序时,常常会遇到各种错误,俗称BUG.而我们程序猿的工作常常需要对程序进行调试,也就是所谓的debug. 程序调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法 ... 
随机推荐
- python编辑三级目录
			一.需求分析 三级目录要能够实现以下要求: 显示根目录,任何子目录中都可以通过输入b字符来返回根目录 任何子目录中都可以通过输入q字符来返回上一级目录 主目录进入子目录后,系统能够打印子目录,根据指打 ... 
- Altera FPGA  AS,PS,Jtag配置模式区别
			Altera FPGA AS,PS,Jtag配置模式区别 FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式. AS模式(active seri ... 
- Python常用模块之PIL
			官方网址:http://www.pythonware.com/products/pil/index.htm Python Imaging Library (PIL) Python图像库(PIL)将图像 ... 
- php 通过curl上传图片
			通过curl上传图片 PHP < 5.5: 使用 目前使用的php版本 7.1 测试无法使用 前面加@ 的方法上传文件 ,查找资料 使用 curl_setopt($ch,CURLOPT_SAFE ... 
- nginx 根据get参数重定向(根据电视访问的mac地址传递的值,来重定向访问别的url地址,这样就可以进行单台的测试环境。。)
			背景是这样的: 公司要做所有客户端的迁移到别的云平台,但又担心会有问题,所以考虑分批次迁移过去,这样就需要迁移部分用户,因为客户端刷但都是统一但rom包,不能轻易发生改动,所以决定用重定向方式将部分客 ... 
- java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法
			当取出这个值的时候只能用java.sql.Date而且只能显示年月日,我想知道如何才能显示时分秒 PS:不改变用getdate()存入的前提下! 解决方法:将getDate()方法改为getTim ... 
- Java 数组转字符
			public static String toString(int[] arr){ String temp = ""; for(int i = 0;i<arr.length; ... 
- Qt多线程-总结QThread-QThreadPool-QtConcurrent
			版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-总结QThread-QThreadPool-QtConcurrent 本文 ... 
- 【第二周】关于java.util包下的Random类
			1.功能:此类的实例用于生成伪随机数流 2.方法(Random的方法有很多,在此只解释说明我认为比较常用的几个方法) (1)next(int bits):生成下一个伪随机数 (2)nextDouble ... 
- B-2阶段组员分数分配
			组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块 武 武 武 武 杨 宫 宫 杨 宫 谢 李 杨 李 谢 李 谢 李 谢 杨 宫 扬 谢 宫 李 武 评 ... 
