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中的赋值、浅拷贝、深拷贝介绍
Mar 09 Python
在Django的form中使用CSS进行设计的方法
Jul 18 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
Jun 16 Python
Python 对象中的数据类型
May 13 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
May 16 Python
Django框架验证码用法实例分析
May 10 Python
简单了解Django ContentType内置组件
Jul 23 Python
python动态文本进度条的实例代码
Jan 22 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 Python
TensorFlow打印输出tensor的值
Apr 19 Python
Python爬虫爬取微信朋友圈
Aug 06 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
用来解析.htgroup文件的PHP类
2012/09/05 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
python实现斗地主分牌洗牌
2020/06/22 Python
python如何调用java类
2020/07/05 Python
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
德尔福集团DELPHI的笔试题
2012/02/22 面试题
体育专业个人的求职信范文
2013/09/21 职场文书
汽车促销活动方案
2014/03/31 职场文书
实训报告范文大全
2014/11/04 职场文书
春节慰问信范文
2015/02/15 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript