通过上篇文章我们已经知道怎么捕获异常,以及在函数中异常的处理机制
话不多说,那我们想既想函数可以返回值,又要抛出异常怎么办?
这就需要我们raise关键字了
我们先看一段代码
def calculate(a):
"""
判断输入是否为数字
:param a: 用户输入
:return: float类型
"""
if str(a).replace(".","",1).isdigit() :
return float(a)
else:
NumError = Exception("输入错误的数字或字母")
raise NumError
try:
price = input("请输入橘子价格: ")
price = calculate(price)
weight = input("请输入橘子重量: ")
weight = calculate(weight)
except Exception as err:
print("输入异常,异常为:{},请重新输入".format(err))
else:
result = price * weight
print("付款金额为:{}".format(result))
这段代码你会发现函数中else中没有return,只有raise抛出来的异常
其实这就是raise在函数中特别的作用,那就是相当于return,且return值为异常
你可以这么理解
函数体内部使用try,except捕捉异常,是手动将异常状态调整为正常状态,那函数正常执行,就需要return值
函数体内部使用raise抛出异常,是手动将正常状态调整为异常状态,那函数不正常执行,会直接报错,就不需要return值
这样对于unittest测试框架来说,想让结果正常,那么就让try里的assert异常正常抛出即可,
通过raise抛出异常
def test_02(self):
try:
self.assertEqual(1,2)
except AssertionError as e:
raise e
python是鼓励我们在函数体内部的进行异常处理
因为使用异常来进行错误流程处理才是符合pythonic,且体现了一个python程序员对自己代码的了解程度,在哪里进行异常处理,代表你对自己代码自信程度
所以大家还是多多在自己代码中使用异常处理吧