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 04 Python
Python类的继承和多态代码详解
Dec 27 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
python3 webp转gif格式的实现示例
Dec 10 Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
Django CSRF认证的几种解决方案
Mar 03 Python
Django-migrate报错问题解决方案
Apr 21 Python
django中嵌套的try-except实例
May 21 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
python os模块在系统管理中的应用
Jun 22 Python
django form和field具体方法和属性说明
Jul 09 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
简单易用的计数器(数据库)
2006/10/09 PHP
隐性调用php程序的方法
2009/03/09 PHP
PHP 开源框架22个简单简介
2009/08/24 PHP
PHP 图片文件上传实现代码
2010/12/29 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
Yii CGridView用法实例详解
2016/07/12 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
利用ajax和PHP实现简单的流程管理
2017/03/23 PHP
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
RequireJS入门一之实现第一个例子
2015/09/30 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
jQuery实现判断上传图片类型和大小的方法示例
2018/04/11 jQuery
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
python多线程http下载实现示例
2013/12/30 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
Python3 中文文件读写方法
2018/01/23 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
如何基于Python批量下载音乐
2019/11/11 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
2015年招商引资工作总结
2015/04/25 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python