首先,异常处理非常重要。在代码中,异常处理到处都是,异常处理保证了程序的正确正常运行。
异常处理的代码格式:
try:
代码块 # 尝试执行的代码块
except Exception(这里是异常类型,可以被捕获,也可以自定义)as 变量:
对异常进行处理的代码块
else:
没有出现异常,执行这里
finally:
最后总是执行这里(例如关闭文件,内存写入硬盘等),收尾代码块
通常用try。。。except。。。就可以了。最多加上finally
但是,python定义的异常类型再多,也赶不上我们的需要。所以,我们需要自定义异常类。
class Error(Exception):
pass
只要继承Exception类,就是自定义异常类。
在代码中,可以i直接抛出自定义的异常。
raise Error('这是自定义异常类的说明')
利用异常可以实现约束
一、在父类中,写出方法,但是不写任何代码,而是直接抛出 NotImplementError 异常(‘没有实现。。。方法’),这样,如果子类没有写出方法实现的代码,或者没有写同一个方法,那么运行时肯定抛出这个没有实现异常。
二、在抽象类中写抽象方法,这种方法必须引入abc模块的ABCMeta和abstractmethod,格式如下:
from abs import ABCMeta,abstractmethod # 引入模块
class Father(metaclass=ABCMeta): # 定义抽象类(metaclass=ABCMeta),只要类中包含了抽象方法,那么这个类就是个抽象类,抽象类可以有普通方法,一个只有抽象方法的类,又叫做接口。
@abstractmethod # 抽象方法的定义语法
def play(self): # 定义一个抽象方法:play
pass # 抽象方法不写实现代码
那么,Father类的子类就必须写出play方法的具体实现代码。否则子类也是一个抽象类。
class Sun(Father):
def play(self):
print('这是play方法的具体实现代码')
从而对子类实现了约束。
模块traceback. 这个模块可以获取到我们每个⽅法的调⽤信息.又被称为堆栈信息. 这个信息对我们拍错是很有帮助的.
import traceback