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中变量的作用域
Jun 16 Python
Python 结巴分词实现关键词抽取分析
Oct 21 Python
详解python中的Turtle函数库
Nov 19 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
python实现字符串加密成纯数字
Mar 19 Python
Python第三方库face_recognition在windows上的安装过程
May 03 Python
python next()和iter()函数原理解析
Feb 07 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
详解python 内存优化
Aug 17 Python
Pandas 稀疏数据结构的实现
Jul 25 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 Python
Python获取字典中某个key的value
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中路径问题的解决方案
2006/10/09 PHP
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
javascript History对象原理解析
2020/02/17 Javascript
对python append 与浅拷贝的实例讲解
2018/05/04 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
Python远程方法调用实现过程解析
2020/07/28 Python
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
一套Delphi的笔试题二
2013/05/11 面试题
项目建议书怎么写
2014/05/15 职场文书
信用卡工资证明范本
2014/10/17 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
创业计划书之家教中心
2019/09/25 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
PyTorch中permute的使用方法
2022/04/26 Python