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中的ctime()方法使用教程
May 22 Python
python清除指定目录内所有文件中script的方法
Jun 30 Python
Python递归函数定义与用法示例
Jun 02 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
查看django执行的sql语句及消耗时间的两种方法
May 29 Python
Selenium元素的常用操作方法分析
Aug 10 Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
python对csv文件追加写入列的方法
Aug 01 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
Mar 24 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
论建造顺序的重要性
2020/03/04 星际争霸
PHP学习笔记之二
2011/01/17 PHP
PHP抽象类 介绍
2012/06/13 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
JQuery基础语法小结
2015/02/27 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
Python中operator模块的操作符使用示例总结
2016/06/28 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
清明节网上祭英烈活动总结
2014/04/30 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
黄河绝恋观后感
2015/06/08 职场文书
退货证明模板
2015/06/23 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL
SQL Server中搜索特定的对象
2022/05/25 SQL Server