​python异常自定义

发布时间:2021-12-08 10:04:02 人气:93 作者:多测师

python异常自定义

  说了这么多异常的使用,终于可以回到我前言所说的在实际项目中存在的问题,即错误码的返回和数值的返回是冲突的(因为错误码也是数值),这时候便可以用异常的抛出和捕获来完成错误码的传递,即try和except 。但系统发生异常时抛出的是系统本身定义好的异常类型,跟自己的错误码又有何关系?这就是我接下来要说的内容:如何定义自己的异常并且能够被except 所捕获。

  1、异常自定义

  实际开发中,有时候系统提供的异常类型往往都不能满足开发的需求。这时候就要使用到异常的自定义啦,你可以通过创建一个新的异常类来拥有自己的异常。自己定义的异常类继承自 Exception 类,可以直接继承,或者间接继承。栗子举起来:

  class MyException(Exception):

  '''自定义的异常类'''

  def __init__(self, error_num): #异常类对象的初始化属性

  self.error_num = error_num def __str__(self): #返回异常类对象说明信息

  err_info = ['超时错误','接收错误']

  return err_info[self.error_num]

  该类继承自Exception 类,并且新类的名字为MyException,这跟前面我们一直在用的IndexError这个异常类一样,都是继承自Exception 类。__init__为构造函数,当我们创建对象时便会自动调用,__str__为对象说明信息函数,当使用print输出对象的时候,只要自己定义了__str__方法,那么就会打印从在这个方法中return的数据。

  即print(MyException(0))时,便可打印“超时错误”这个字符串,print(MyException(1))时,便可打印“接收错误”这个字符串,心细的你应该可以理解,MyException(x)为临时对象(x是传入错误码参数,这里只定义了0和1),与a = MyException(x),a为对象一个样子 。 这里有一个好玩的说法,在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法。

python异常自定义

  2、异常抛出raise

  现在我们自己定义的错误定义好了(上面的MyException),怎么能像IndexError一样让except捕获到呢?于是乎raise关键字派上用场。我们在异常机制中用try…except时,一般都是将可能产生的错误代码放到try语句块中,这时出现异常则系统便会自动将其抛出,比如IndexError,这样except就能捕获到,所以我们只要将自定义的异常在需要的时候将其抛出即可。

  raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类),那么我们刚刚定义的异常类就可以用啦,举个简单例子:

  try:

  raise MyException(0) # 自己定义的错误类,将错误码为0的错误抛出except MyException as e:

  print(e) # 输出的是__str__返回的内容,即“超时错误”

  这里我直接将自己定义的错误抛出,…as e就是把得到的错误当成对象e,这样才可以访问其属性和方法。因为自己定义的错误中可以支持多个错误码(本质还是MyException这个错误),所以便可实现传入不同错误码就可打印不同错误信息。

  3、异常捕获

  只要我们在try中将错误raise出来,except就可以捕获到(当然,异常必须是Exception 子类才能被捕获),将前面两个例子整合起来,代码如下:

  '''错误码:0代表超时错误,1代表接收错误'''class MyException(Exception):

  '''自定义的异常类'''

  def __init__(self, error_num): # 异常类对象的初始化属性

  self.error_num= error_num def __str__(self): # 返回异常类对象指定错误码的信息

  err_info = ['超时错误','接收错误']

  return err_info[self.error_num]def fun()

  raise MyException(1) # 抛出异常对象,传入错误码1def demo_main():

  try:

  fun()

  except MyException as ex: # 这里要使用MyException进行捕获,对象为ex

  print(ex) # 输出的是__str__部分返回的内容,即“接收错误”

  print(ex.error_num) # 输出的是__init__中定义的error_num,即1demo_main() #此处开始运行

  代码从demo_main函数开始执行,进入try语句块,语句块中的fun()函数模拟代码运行失败时raise 自定义的异常,except 正常接收后通过as 关键字得到异常对象,访问该异常对象,便可正常输出自定义的异常信息和自定义的错误码。

  以上内容为大家介绍了python异常自定义,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注多测师。https://www.e70w.com/


返回列表
在线客服
联系方式

热线电话

17727591462

上班时间

周一到周五

二维码
线