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 15 Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 Python
Python实现简单文本字符串处理的方法
Jan 22 Python
python 将md5转为16字节的方法
May 29 Python
python2.7和NLTK安装详细教程
Sep 19 Python
详解Python locals()的陷阱
Mar 26 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
使用jupyter notebook直接打开.md格式的文件
Apr 10 Python
python中常见错误及解决方法
Jun 21 Python
pytorch 使用半精度模型部署的操作
May 24 Python
python四种出行路线规划的实现
Jun 23 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
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
jQuery实现全选按钮
2021/01/01 jQuery
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
介绍Python中几个常用的类方法
2015/04/08 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
python调用动态链接库的基本过程详解
2019/06/19 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
Puma印度官网:德国运动品牌
2019/10/06 全球购物
2014年团队工作总结
2014/11/24 职场文书
2014年度安全工作总结
2014/12/04 职场文书
2014年人大工作总结
2014/12/10 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
MYSQL数据库使用UTF-8中文编码乱码的解决办法
2021/05/26 MySQL
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫