Python3 入门之抛出自定义异常
在Pyhton开发中,我们可以用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是一个异常的实例或者是 Exception 的子类。
举例: 在程序运行中,我们需要用户至少输入3个字符,而用户只输了一个,程序并不一定报错,这时,我们就可以通过自定义异常的方式提醒用户规范输入。
修改前的代码:
def main():
s = input('请输入至少三个字符--> ')
main()
此时,如果只输入一个字母,程序并不会报错,也没有提示用户正确输入!
添加自定义异常后的代码
class ShortInputException(Exception): #继承Exception
'''自定义的异常类'''
def __init__(self, length, atleast):
super().__init__() #这条语句在下文有说明
self.length = length
self.atleast = atleast
def main():
try:
s = input('请输入至少三个字符--> ')
if len(s) < 3: #判断用户是否输入至少三个字符
# raise引发一个你定义的异常
raise ShortInputException(len(s), 3) #raise抛出一个自定义异常类的实例的引用
except ShortInputException as result: #result用来接收自定义异常类的实例的引用,即相当于异常类的实例
print('ShortInputException: 输入的长度是 %d,长度至少应是 %d'% (result.length, result.atleast))
#由于result也指向异常类的实例,可以通过调用result的实例属性进行输出
else:
print('没有异常发生.')
main()
注:super().__init__()
一行代码,可以调用也可以不调用,建议调用,因为__init__
方法往往是用来对创建完的对象进行初始化工作,如果在子类中重写了父类的__init__
方法,即意味着父类中的很多初始化工作没有做,这样就不保证程序的稳定了,所以在以后的开发中,如果重写了父类的__init__
方法,最好是先调用父类的这个方法,然后再添加自己的功能。