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 相关文章推荐
Python ZipFile模块详解
Nov 01 Python
python实现爬虫下载美女图片
Jul 14 Python
windows下安装Python和pip终极图文教程
Mar 05 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
一篇文章快速了解Python的GIL
Jan 12 Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 Python
PyTorch中Tensor的拼接与拆分的实现
Aug 18 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
Pytorch 多块GPU的使用详解
Dec 31 Python
Python count函数使用方法实例解析
Mar 23 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 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使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
Python合并多个装饰器小技巧
2015/04/28 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
python实现弹窗祝福效果
2019/04/07 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
运动会入场解说词
2014/02/07 职场文书
网络工程师职业规划
2014/02/10 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
公司合作协议范文
2014/10/01 职场文书
政协会议宣传标语
2014/10/09 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
2015年采购员工作总结
2015/04/27 职场文书
学校百日安全活动总结
2015/05/07 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python