python3小白课:自己引发异常

raise引发异常

当程序出现系统预先内置定义的异常类的时候,会自动引发异常。但有些时候,我们根据业务的需要,某些计算得到的业务数据不符合规范等场景,在我们看来也属于异常结果了,这些异常我们想要进行特别处理,这时候就需要我们通过代码来自己引发异常。

在python中,可以使用raise语句来引发异常。

raise语句有三种常见的用法:

  • 只用raise关键字:会引发当前上下文中捕获的异常,默认会引发RuntimeError异常。
  • raise 异常类名称:raise后带一个异常类,引发指定异常类的默认实例。
  • raise 异常类名称(描述信息):引发指定的异常对象。

这几种方法本质上都是引发一个异常实例,而一个raise语句只能引发一个异常实例。

来先看个例子吧:

# coding:utf-8
a = 1
if a == 1:
    raise

运行后我们可以看到,raise语句可以脱离try结构而使用,但一般没啥实际意义,会自动触发默认的RuntimeError。

我们一般会这么用:

# coding:utf-8
try:
    a = 1 / 0
except Exception as e:
    print(e)
    raise

可以看到,try块有异常触发了except块的代码,先打印了异常对象e的内容,然后使用raise再次引发了上下文的这个ZeroDivisionError异常。

我们还可以这样写:

# coding:utf-8
try:
    raise ValueError
except ValueError:
    print("触发了ValueError异常")
except:
    print("触发了其他异常")

还可以指定异常信息:

# coding:utf-8
raise ValueError("值异常,我自己写的信息")

自定义异常类

前面部分的学习是让我们掌握了触发异常类的方法,在使用raise关键字的时候,不单单只能引发系统已经定义好的异常类,你还可以自定义你自己名字的异常类,这样可以更明确的展现异常,最大限度地提供异常的有用信息,raise语句也可以触发自定义的异常类。

自定义的异常类都应该继承自Exception基类或者它的子类,而且定义也很简单,无需书写过多代码,只需要指定自定义异常类的父类即可。举个例子:

# coding:utf-8
# 名字只是为了让程序更加有可读性,你可以自定义异常类类名,一般加个Exception结尾啥的好认
class XiaobaiException(Exception): pass
raise XiaobaiException("小白报错啦!")

单词释义

单词 释义
raise 提升,提起,在python中用来引发异常
RuntimeError 运行时异常
ZeroDivisionError 零除异常,除数为0的时候抛出
ValueError 值异常
Copyright © 雪山凌狐教程 all right reserved,powered by Gitbook该文件修订时间: 2020-07-12 20:47:35

results matching ""

    No results matching ""