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的Scrapy爬虫框架简单学习笔记
Jan 20 Python
python实现电脑自动关机
Jun 20 Python
pandas 根据列的值选取所有行的示例
Nov 07 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
用Python生成HTML表格的方法示例
Mar 06 Python
基于python 凸包问题的解决
Apr 16 Python
Python调用.net动态库实现过程解析
Jun 05 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 Python
浅析NumPy 切片和索引
Sep 02 Python
Django vue前后端分离整合过程解析
Nov 20 Python
如何通过Python实现RabbitMQ延迟队列
Nov 28 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
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
在Django中使用Sitemap的方法讲解
2015/07/22 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
python deque模块简单使用代码实例
2020/03/12 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
数控专业推荐信范文
2013/12/02 职场文书
我未来的职业规划范文
2014/01/11 职场文书
恐龙的灭绝教学反思
2014/02/12 职场文书
工程专业应届生求职信
2014/02/19 职场文书
小学生安全演讲稿
2014/04/25 职场文书
社区维稳工作方案
2014/06/06 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
详解SQL报错盲注
2022/07/23 SQL Server