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和C语言混合编程实例
Jun 04 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
python如何生成网页验证码
Jul 28 Python
python实现汽车管理系统
Nov 30 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
django基础学习之send_mail功能
Aug 07 Python
python多环境切换及pyenv使用过程详解
Sep 27 Python
python 生成器和迭代器的原理解析
Oct 12 Python
利用python画出AUC曲线的实例
Feb 28 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
去除python中的字符串空格的简单方法
Dec 22 Python
详解Python中的Lock和Rlock
Jan 26 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使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
详解Node 定时器
2018/02/26 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
pandas数据分组和聚合操作方法
2018/04/11 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
如何写一个自定义标签
2012/12/28 面试题
消防先进事迹材料
2014/02/10 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
读《推着妈妈去旅行》有感1500字
2019/10/15 职场文书
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL