关于异常处理

Posted wjywinner

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于异常处理相关的知识,希望对你有一定的参考价值。

首先,异常处理非常重要。在代码中,异常处理到处都是,异常处理保证了程序的正确正常运行。

异常处理的代码格式:

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

 

以上是关于关于异常处理的主要内容,如果未能解决你的问题,请参考以下文章

springMVC关于异常优先级的处理

关于异常处理的几点建议

关于JAVA异常处理的20个最佳实践

关于java中Exception异常

关于异常的一点思考

Rotor里的异常处理