Python异常继承关系和自定义异常实现代码实例


Posted in Python onFebruary 20, 2020

这篇文章主要介绍了Python异常继承关系和自定义异常实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

主要介绍 python 中异常的继承关系,及如何自定义异常

1. 异常的继承关系

BaseException # 所有异常的基类
 +-- SystemExit # 解释器请求退出
 +-- KeyboardInterrupt  用户中断执行(通常是输入^C)
 +-- GeneratorExit # 生成器(generator)发生异常来通知退出
 +-- Exception # 常规异常的基类
  +-- StopIteration # 迭代器没有更多的值
  +-- StandardError # 标准错误
  | +-- BufferError
  | +-- ArithmeticError
  | | +-- FloatingPointError
  | | +-- OverflowError
  | | +-- ZeroDivisionError
  | +-- AssertionError
  | +-- AttributeError
  | +-- EnvironmentError
  | | +-- IOError
  | | +-- OSError
  | |   +-- WindowsError (Windows)
  | |   +-- VMSError (VMS)
  | +-- EOFError
  | +-- ImportError
  | +-- LookupError
  | | +-- IndexError
  | | +-- KeyError
  | +-- MemoryError
  | +-- NameError
  | | +-- UnboundLocalError
  | +-- ReferenceError
  | +-- RuntimeError
  | | +-- NotImplementedError
  | +-- SyntaxError
  | | +-- IndentationError
  | |   +-- TabError
  | +-- SystemError
  | +-- TypeError
  | +-- ValueError
  |   +-- UnicodeError
  |    +-- UnicodeDecodeError
  |    +-- UnicodeEncodeError
  |    +-- UnicodeTranslateError
  +-- Warning
   +-- DeprecationWarning
   +-- PendingDeprecationWarning
   +-- RuntimeWarning
   +-- SyntaxWarning
   +-- UserWarning
   +-- FutureWarnin
   +-- ImportWarnin
   +-- UnicodeWarnin
   +-- BytesWarning

2. 自定义异常

#自定义异常 需要继承Exception
class MyException(Exception):

 def __init__(self, *args):
  self.args = args

if __name__ == '__main__':
 try:
  raise MyException("自定义异常")
 except MyException as e:
  print e

3. 异常捕获

# 示例
str1 = 'abc'
try:
 int(str1)
except IndexError as e:
 print e
except KeyError as e:
 print e
except ValueError as e:
 print e
else:
 print 'try内正常处理'
finally:
 print '无论异常与否,都会执行我'

4. 主动触发异常

# raise xxx
def test_zero(num):
 try:
  if num == 0:
   raise ValueError('参数错误')
  return num
 except Exception as e:
  print e

test_zero(0)

5. 采用traceback模块查看异常

异常发生时,Python 能“记住”引发的异常以及程序的当前状态。

Python 维护着traceback(跟踪)对象,其中含有异常发生时与函数调用堆栈有关的信息。

异常可能在一系列嵌套较深的函数调用中引发。

程序调用每个函数时,Python 会在“函数调用堆栈”的起始处插入函数名。一旦异常被引发,Python 会搜索一个相应的异常处理程序。如果当前函数中没有异常处理程序,当前函数会终止执行,Python 会搜索当前函数的调用函数,并以此类推,直到发现匹配的异常处理程序,或者Python 抵达主程序为止。这一查找合适的异常处理程序的过程称为“堆栈辗转开解”(StackUnwinding)。

解释器一方面维护着与放置堆栈中的函数有关的信息,另一方面也维护着与已从堆栈中“辗转开解”的函数有关的信息。

#示例
def div(num1, num2):
 try:
  result = num1/num2
  return result
 except Exception as e:
  traceback.print_exc()

print div(1, 0)
#执行结果
Traceback (most recent call last):
None
 File "F:/Technology-20161005/python/python_project/demo/exceptiondemo/exceptiondemo.py", line 17, in div
 result = num1/num2
ZeroDivisionError: integer division or modulo by zero
# 可以将异常信息写到文件中
traceback.print_exc(file=open('1.txt','w+'))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pymongo为mongodb数据库添加索引的方法
May 11 Python
深入理解Python中命名空间的查找规则LEGB
Aug 06 Python
在python3.5中使用OpenCV的实例讲解
Apr 02 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
使用pycharm生成代码模板的实例
May 23 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
详解用python计算阶乘的几种方法
Aug 14 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
python模拟点击在ios中实现的实例讲解
Nov 26 Python
python实现网络五子棋
Apr 11 Python
python垃圾回收机制原理分析
Apr 13 Python
Python安装与卸载流程详细步骤(图解)
Feb 20 #Python
PyCharm 专业版安装图文教程
Feb 20 #Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 #Python
Python 实现黑客帝国中的字符雨的示例代码
Feb 20 #Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 #Python
Python OpenCV读取显示视频的方法示例
Feb 20 #Python
基于spring boot 日志(logback)报错的解决方式
Feb 20 #Python
You might like
PHP array_multisort()函数的使用札记
2011/07/03 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
js中的 || 与 && 运算符详解
2018/05/24 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
Python如何读写字节数据
2020/08/05 Python
Python实现石头剪刀布游戏
2021/01/20 Python
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
建筑实习自我鉴定
2013/10/18 职场文书
前台文员个人求职信范文
2014/01/05 职场文书
个人承诺书怎么写
2014/05/24 职场文书
幸福中国演讲稿
2014/09/12 职场文书
报名委托书
2015/01/29 职场文书
工程部经理岗位职责
2015/02/02 职场文书
小学生交通安全寄语
2015/02/27 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
大学生创业计划书
2019/06/24 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL