# python3小白课:自己引发异常 ### raise引发异常 当程序出现系统预先内置定义的异常类的时候,会自动引发异常。但有些时候,我们根据业务的需要,某些计算得到的业务数据不符合规范等场景,在我们看来也属于异常结果了,这些异常我们想要进行特别处理,这时候就需要我们通过代码来自己引发异常。 在python中,可以使用raise语句来引发异常。 raise语句有三种常见的用法: * 只用raise关键字:会引发当前上下文中捕获的异常,默认会引发RuntimeError异常。 * raise 异常类名称:raise后带一个异常类,引发指定异常类的默认实例。 * raise 异常类名称(描述信息):引发指定的异常对象。 这几种方法本质上都是引发一个异常实例,而一个raise语句只能引发一个异常实例。 来先看个例子吧: ```python # coding:utf-8 a = 1 if a == 1: raise ``` 运行后我们可以看到,raise语句可以脱离try结构而使用,但一般没啥实际意义,会自动触发默认的RuntimeError。 我们一般会这么用: ```python # coding:utf-8 try: a = 1 / 0 except Exception as e: print(e) raise ``` 可以看到,try块有异常触发了except块的代码,先打印了异常对象e的内容,然后使用raise再次引发了上下文的这个ZeroDivisionError异常。 我们还可以这样写: ```python # coding:utf-8 try: raise ValueError except ValueError: print("触发了ValueError异常") except: print("触发了其他异常") ``` 还可以指定异常信息: ```python # coding:utf-8 raise ValueError("值异常,我自己写的信息") ``` --- ### 自定义异常类 前面部分的学习是让我们掌握了触发异常类的方法,在使用raise关键字的时候,不单单只能引发系统已经定义好的异常类,你还可以自定义你自己名字的异常类,这样可以更明确的展现异常,最大限度地提供异常的有用信息,raise语句也可以触发自定义的异常类。 自定义的异常类都应该继承自`Exception`基类或者它的子类,而且定义也很简单,无需书写过多代码,只需要指定自定义异常类的父类即可。举个例子: ```python # coding:utf-8 # 名字只是为了让程序更加有可读性,你可以自定义异常类类名,一般加个Exception结尾啥的好认 class XiaobaiException(Exception): pass raise XiaobaiException("小白报错啦!") ``` ### 单词释义 | 单词 | 释义 | | ----------------- | ---------------------------------- | | raise | 提升,提起,在python中用来引发异常 | | RuntimeError | 运行时异常 | | ZeroDivisionError | 零除异常,除数为0的时候抛出 | | ValueError | 值异常 |