Python自定义异常类及用法
前面的例子里充斥了很多 Python 内置的异常类型,读者也许会问,我可以创建自己的异常类型吗?
答案是肯定的,Python 允许用户自定义异常类型。实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时就可以创建一个新的异常类来拥有自己的异常。
其实,在前面章节中,已经涉及到了异常类的创建,例如:
图 1 Python 异常类继承图
下面也是自定义的异常类,和上面的异常类相比,其内部实现了 __init__() 方法和 __str__() 方法:
答案是肯定的,Python 允许用户自定义异常类型。实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时就可以创建一个新的异常类来拥有自己的异常。
其实,在前面章节中,已经涉及到了异常类的创建,例如:
class SelfExceptionError(Exception): pass try: raise SelfExceptionError() except SelfExceptionError as err: print("捕捉到自定义异常")运行结果为:
捕捉到自定义异常
可以看到,此程序中就自定义了一个名为 SelfExceptionError 的异常类,只不过该类是一个空类。需要注意的是,自定义一个异常类,通常应继承自 Exception 类(直接继承),当然也可以继承自那些本身就是从 Exception 继承而来的类(间接继承 Exception)。由于大多数 Python 内置异常的名字都以 "Error" 结尾,所以实际命名时尽量跟标准的异常命名一样。
图 1 Python 异常类继承图
另外,系统自带的异常只要触发会自动抛出(比如 NameError、ValueError 等),但用户自定义的异常需要用户自己决定什么时候抛出。也就是说,自定义的异常需要使用 raise 手动抛出。注意,虽然所有类同时继承自 BaseException,但它是为系统退出异常而保留的,假如直接继承 BaseException,可能会导致自定义异常不会被捕获,而是直接发送信号退出程序运行,脱离了我们自定义异常类的初衷。
下面也是自定义的异常类,和上面的异常类相比,其内部实现了 __init__() 方法和 __str__() 方法:
class InputError(Exception): '''当输出有误时,抛出此异常''' #自定义异常类型的初始化 def __init__(self, value): self.value = value # 返回异常类对象的说明信息 def __str__(self): return ("{} is invalid input".format(repr(self.value))) try: raise InputError(1) # 抛出 MyInputError 这个异常 except InputError as err: print('error: {}'.format(err))运行结果为:
error: 1 is invalid input
注意,只要自定义的类继承自 Exception,则该类就是一个异常类,至于此类中包含的内容,并没有做任何规定。所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频