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 相关文章推荐
python函数返回多个值的示例方法
Dec 04 Python
Python进程间通信之共享内存详解
Oct 30 Python
浅谈Python2获取中文文件名的编码问题
Jan 09 Python
python机器学习理论与实战(二)决策树
Jan 19 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
详解flask表单提交的两种方式
Jul 21 Python
python开发准备工作之配置虚拟环境(非常重要)
Feb 11 Python
python pexpect ssh 远程登录服务器的方法
Feb 14 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
python读写文件write和flush的实现方式
Feb 21 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 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
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
js实现iframe动态调整高度的代码
2008/01/06 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
中国梦的演讲稿
2014/01/08 职场文书
青蓝工程实施方案
2014/03/27 职场文书
秦兵马俑导游词
2015/02/02 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
如何用python绘制雷达图
2021/04/24 Python