Python自定义一个异常类的方法


Posted in Python onJune 27, 2019

如何实现自定义一个异常

python内置了许多异常类,为编写代码划定红线,才使调试代码时能及时发现错误。那么我们编写一个模块也可以为使用此模块者划定红线,来约束使用者可用哪些数据,这就需要自定义异常类型。

首先需要了的是自定义类是的父类:

python说明文档中是这样说 exception Exception:

所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应当派生自此类

那么就可以通过直接或间接的继承Exception就可以自定义一个异常类,当然也可以间接的继承python内置的异常类。

通常的做法是,先为自己的模块创建一个基类,然后再从此基类派生其他异常类,这样不但清晰明了,也方便管理:

例如:

class MyErorr(Exception):
  pass
class AaErorr(MyErorr):
  pass
class BbErorr(MyErorr):
  pass

Python自定义一个异常类的方法

其次要了解 raise 语句:意为抛出异常。

raise 语句允许在写代码的时候强制发生指定的异常。

写法是:raise 后跟要抛出的异常。这个异常必须是异常实例或者是一个异常类。

Python自定义一个异常类的方法

步骤:

自定义异常类

例如:写一个只接收整数的加法计算器,当输入的不是整数时引发异常。

class CalcErorr(Exception)
  pass
class NumErorr(CalcErorr)
  def __init__(self,numA,numB)
    self.numA=numA
    self.numB=numB
  def __str__(self)
    return f"本计算器只接收整数!"

两个魔法方法:

  • def __init__(self),异常类对象的初始化属性。
  • def __str__(self),返回异常类对象说明信息。

Python自定义一个异常类的方法

引发异常

定义一个计算函数,函数体按try语句规则,在try子句内引发异常。

def calculator(a,b)
  try:
    if type(a)!=int or type(b)!=int:
      raise NumErorr(a,b) 
  except Exception as e:
    print(e)
  else:
    c=a+b
    return c

Python自定义一个异常类的方法

捕获异常

try语句的except子句来捕获异常,并返回描述信息。

except Exception as e: 
  print(e)

Python自定义一个异常类的方法

else子句

在输入正确的情况下,不会引发异常,执行else子句执行计算。

这是一个简单的自定义的异常类。当有其他用户使用时,如果输入错误就会引发异常。下面两个例子来检验一下。

Python自定义一个异常类的方法

用户调用:(错误数据)

sA=calculator(33.3,66)

print(sA)

---本计算器只接收整数!

---None

输入的时小数,所以引发异常。

Python自定义一个异常类的方法

用户调用:(正确数据)

sA=calculator(33,66)

print(sA)

---99

输入正确计算出结果

Python自定义一个异常类的方法

总结:以上就是关于Python自定义异常类的实操方法,感谢大家的阅读和对三水点靠木的支持。

Python 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
通过C++学习Python
Jan 20 Python
200行自定义python异步非阻塞Web框架
Mar 15 Python
解决python文件字符串转列表时遇到空行的问题
Jul 09 Python
pandas series序列转化为星期几的实例
Apr 11 Python
python使用原始套接字发送二层包(链路层帧)的方法
Jul 22 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
Python中logger日志模块详解
Aug 04 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
TensorFlow的自动求导原理分析
May 26 Python
图文详解matlab原始处理图像几何变换
Jul 09 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 #Python
python pytest进阶之conftest.py详解
Jun 27 #Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 #Python
python pytest进阶之fixture详解
Jun 27 #Python
解决pycharm 远程调试 上传 helpers 卡住的问题
Jun 27 #Python
python中pytest收集用例规则与运行指定用例详解
Jun 27 #Python
python取余运算符知识点详解
Jun 27 #Python
You might like
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
JavaScript的继承的封装介绍
2013/10/15 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
Python2和Python3中print的用法示例总结
2017/10/25 Python
简单谈谈python基本数据类型
2018/09/26 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
设计师珠宝:Ylang 23
2018/05/11 全球购物
艺术用品:Arteza
2018/11/25 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
优秀员工自荐书范文
2013/12/08 职场文书
高中家长寄语
2014/04/02 职场文书
会计专业自荐信
2014/06/03 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
计划生育诚信协议书
2014/11/02 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers
vue递归实现树形组件
2022/07/15 Vue.js