python3xiaobaike_2020/chapter8/8-6 python3小白课:自己引发异常.md
2025-04-20 23:22:14 +08:00

84 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 | 值异常 |