开发者学堂课程【Python 语言基础 3:函数、面向对象、异常处理:自定义异常处理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:
https://developer.aliyun.com/learning/course/601/detail/8765自定义异常处理
目录:
一、 raise 语句实现抛出异常对象
二、 if……else…… 语句实现抛出异常对象
三、 自定义类实现抛出异常
理解异常处理方式之后,本课时内容学习 Python 中如何实现抛出异常,也即用户自定义异常对象。
一、raise 语句实现抛出异常现象
可以使用 raise 语句来抛出异常,raise 语句后需要跟一个异常类或者异常的实例。目的是当运算中出现负数时向外抛出异常,raise 语句实现抛出异常实现代码如下:
def add(a,b):
#如果a和b中有负数,就向调用出抛出异常
If a < 0 or b < 0;
# raise 用于向外部抛出异常,后面可以跟一个异常类或者异常类的实例。
Raise Exception
r = a+b
return r
print(add(123,456))
运行上述代码结果正常,输出结果 579。
如果将输出结果
print(add(123,456))
改写为
print(add(-123,456))
运行结果就会抛出异常,但是此时应该注意的抛出的异常没有信息,因为现在传的是一个类,实例是由解析器自己创建的,如若想传递信息,则 raise Exception 处代码需改写为:
raise Exception
(‘二个参数中不能有负数!’),运行代码后即可传递出信息:二个参数中不能有负数!因此,在此我们可以手动的向外部使用 raise 抛出异常信息。
接着我们分析为何我们在此处抛出异常,我们抛出异常的目的,是告诉外部此处存在问题,希望引起注意并加以处理。此处抛出目的仅仅是抛出异常而不处理异常结果。
二、if……else…… 语句实现抛出异常对象
对于异常的处理我们也可以使用 if……else…… 来代替异常处理,如上述 raise 抛出异常也可以使用以下代码代替:
def add(a,b):
#如果a和b中有负数,就向调用出抛出异常
If a < 0 or b < 0;
# 通过if……else……来代替异常的处理
Return None
r = a+b
return r
print(add(-123,456))
运行结果为 “None”
需要注意的是,如果运行结果不需要处理,此处可以使用 if……else…… 代替 raise,如果此处异常结果对后面影响严重需要处理,则需要使用 raise 抛出异常,引起注意并加以处理,以免引起对后面代码运行产生影响。
综述,raise 抛出异常是提醒代码运行者注意此处异常并加以注意。
三、自定义类实现抛出异常
但是 raise Exception 并不能反馈异常的类型,有时我们希望如果是变量的错,我们抛出 NameError;如果是索引错误,我们抛出 IndexError。如若实现这中目的,也是可以是实现,只需创建一个类继承 Exception 即可。实现代码如下:
class Myerror(Exception):
pass
def add(a,b):
#如果 a 和 b 中有负数,就向调用出抛出异常
If a < 0 or b < 0;
# raise 用于向外部抛出异常,后面可以跟一个异常类或者异常类的实例。
Raise Myerror(‘自定义的异常‘)
r = a+b
return r
print(add(123,456))
运行上述代码即可实现使用自定义类抛出异常。