且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

自定义异常处理|学习笔记

更新时间:2022-09-02 15:39:07

开发者学堂课程【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))

运行上述代码即可实现使用自定义类抛出异常。