异常处理结构

Python内置异常类层次结构

Python内置异常类层次结构

异常处理结构

  • 先尝试运行代码,如果没有问题就正常执行,如果发生了错误尝试着去捕获和处理,最后实在没办法了才崩溃

try…except…

  • try子句中的代码块包含可能会引发异常语句,except子句则用来捕捉相应异常
  • 如果try子句中的代码引发异常并被except子句捕捉,就执行except子句的代码块
  • 如果try中的代码块没有出现异常就继续往下执行异常处理结构后面的代码
  • 如果出现异常但没有被except捕获,继续往外层抛出
  • 如果所有层都没有捕获并处理该异常,程序崩溃并将该异常呈现给最终用户
try:
    #可能会引发异常的代码,先执行一下试试
except Exception[as reason]:
    #如果try中的代码抛出异常并被except捕捉,就执行这里的代码
>>> while True:
	x=input('Please input:')
	try:
		x=int(x)
		print('You have input{0}'.format(x))
		break
	except Exception as e:
		print('Error')

		
Please input:23s
Error
Please input:4
You have input4

try…except…else…

  • 如果try中的代码抛出了异常并且被except语句捕捉则执行相应的异常处理代码,这种情况下就不会执行else中的代码
  • 如果try中的代码没有引发异常,则执行else块的代码
try#可能会引发异常的代码
except Exception[as reason]:
    #用来处理异常的代码
else#如果try子句中的代码没有引发异常,就继续执行这里的代码
  • 不要把太多代码放在try中,而是应该只放真的可能会引发异常的代码
>>> while True:
	x=input('Please input')
	try:
		x=int(x)
	except Exception as e:
		print('Error')
	else:
		print('You have input {0}'.format(x))
		break

	
Please input8c
Error
Please input8
You have input 8

try…except…finally…

  • 在这种结构中,无论try中的代码是否发生异常,也不管抛出的异常有没有被except语句捕获,finally子句中的代码总是会得到执行
  • 所以,finally中的代码常用来做一些清理工作,例如释放try子句中的代码申请的资源
try#可能会引发异常的代码
except Exception [as reason]:
  #处理异常的代码
finally:
  #无论try子句中的代码是否引发异常,都会执行这里的代码

可以捕捉多种异常的异常处理结构

try#可能会引发异常的代码
except Exception1:
     #处理异常类型1的代码
except EXception2:
    #处理异常类型2的代码
except Exception3:
    #处理异常类型3的代码
.
.
.
  • 可以同时包含else子句、except子句和finally子句

单元测试unittest

  • 软件测试的方法有很多,从软件工程角度来讲,可以分为白盒测试和黑盒测试两大类
  • 白盒测试主要通过阅读程序源代码来判断是否符合功能要求
  • 黑盒测试不关心模块的内部实现方式,只关心其功能是否正确,通过精心设计一些测试用例来检验模块的输入和输出是否正确,最终判断是否符合预定的功能要求
  • 一般一般黑河测试为主,白盒测试为辅
  • Python标准库unittest提供了大量用于单元测试的类和方法,其中最常用的是TestCase类
方法名称功能说明
assertEqual(a,b)a==b
assertTrue(x)bool(x) is True
assertIs(a,b)a is b
assertIsNone(x)x is None
assertIn(a,b)a in b
assertIsInstance(a,b)isinstance(a,b)
assertAlmostEqual(a,b)round(a-b,7)==0
assertGreater(a,b)a>b
assertLess(a,b)a<b
assertRegex(s,r)r.search(s)
assertNotEqual(a,b)a!=b
assertFalse(x)bool(x) is Flase
assertIsNot(a,b)a is not b
assertIsNotNone(x)x is not None
assertNotIn(a,b)a not in b
assertNotIsInstance(a,b)not isinstance(a,b)
assertNotAlmostEqual(a,b)round(a-b,7)!=0
assertGreaterEqual(a,b)a>=b
assertLessEqual(a,b)a<=b
assertNotRegex(s,r)not r.search(s)
setUp()每项测试开始之前自动调用该函数
tearDown()每次测试完成之后自动调用该函数
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值