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中executemany和序列的使用方法
Aug 12 Python
Python Tkinter实现简易计算器功能
Jan 30 Python
python调用百度语音识别api
Aug 30 Python
Python Numpy 实现交换两行和两列的方法
Jun 26 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
Django 用户认证组件使用详解
Jul 23 Python
使用python实现对元素的长截图功能
Nov 14 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
使用python 将图片复制到系统剪贴中
Dec 13 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 Python
python opencv人脸识别考勤系统的完整源码
Apr 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
中国收音机工业发展史
2021/03/02 无线电
PHP学习之字符串比较和查找
2011/04/17 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
PHP实现验证码校验功能
2017/11/16 PHP
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
python合并文本文件示例
2014/02/07 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
在python中使用with打开多个文件的方法
2019/01/07 Python
Python实现SQL注入检测插件实例代码
2019/02/02 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
Django实现随机图形验证码的示例
2020/10/15 Python
Prototype如何更新局部页面
2013/03/03 面试题
高二历史教学反思
2014/01/25 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
中学生自我评价范文
2015/03/03 职场文书
起诉书格式范文
2015/05/20 职场文书
高中家长意见怎么写
2015/06/03 职场文书
工作收入证明范本
2015/06/12 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书