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的Flask框架中实现分页功能的教程
Apr 20 Python
python中assert用法实例分析
Apr 30 Python
Python实现爬虫爬取NBA数据功能示例
May 28 Python
python实现名片管理系统
Nov 29 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
python字符串拼接+和join的区别详解
Dec 03 Python
Python命令行参数argv和argparse该如何使用
Feb 08 Python
python删除csv文件的行列
Apr 06 Python
关于python爬虫应用urllib库作用分析
Sep 04 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编程风格规范分享
2014/01/15 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
解决在Laravel 中处理OPTIONS请求的问题
2019/10/11 PHP
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
解决vue 引入子组件报错的问题
2018/09/06 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
Python分支结构(switch)操作简介
2018/01/17 Python
python实现微信自动回复机器人功能
2019/07/11 Python
python类的实例化问题解决
2019/08/31 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
护士专业推荐信
2013/11/02 职场文书
公司综合部的成员自我评价分享
2013/11/05 职场文书
医药代表个人求职信范本
2013/12/19 职场文书
代办委托书怎样写
2014/04/08 职场文书
婚礼秀策划方案
2014/05/19 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
2015党建工作简报
2015/07/21 职场文书