Python自定义异常并raise抛出和捕捉

​ 实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时候你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承。

代码实现比较简单,直接上代码。

1. 自定义异常

1
2
3
4
5
6
7
# 用户自定义异常秩序继承Exception类,重写__init__和__str__ 方法。
class TooLongException(Exception):
def __init__(self, length):
self.length = length

def __str__(self):
print('输入字姓名的长度为 %s , 长度超过了限制'%(str(self.length)))

2. 手动抛出异常raise

​ 系统的自带的异常只要触发会自动抛出,比如NameError,但用户自定义的异常需要用户自己决定什么时候抛出。raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。大多数的异常的名字都以”Error”结尾,所以实际命名时尽量跟标准的异常命名一样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class TooLongException(Exception):
def __init__(self, length):
self.length = length

def __str__(self):
print('输入字姓名的长度为 %s , 长度超过了限制'%(str(self.length)))


def NameTest():

name = input('请输入姓名:')
name_length = len(name)
if name_length > 4:
raise TooLongException(name_length)
else:
print('你的名字为:' + name)

NameTest()

3. 异常捕捉 try … except …

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def NameTest_2():
name = input('请输入姓名:')
name_length = len(name)

try:
if name_length > 4:
raise TooLongException(name_length)
else:
print('你的名字为:' + name)
# 这里用Exception或者TooLongException都能捕捉到
except Exception as e:
print(e)

NameTest_2()

参考链接:

https://blog.csdn.net/qq_26442553/article/details/81783223