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去除字符串两端空格的方法
May 21 Python
Python os模块学习笔记
Jun 21 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
Feb 13 Python
Python中顺序表的实现简单代码分享
Jan 09 Python
Python pymongo模块常用操作分析
Sep 01 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
pytorch-神经网络拟合曲线实例
Jan 15 Python
使用K.function()调试keras操作
Jun 17 Python
解析Tensorflow之MNIST的使用
Jun 30 Python
Cpython解释器中的GIL全局解释器锁
Nov 09 Python
python“静态”变量、实例变量与本地变量的声明示例
Nov 13 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中source #N问题的解决方法
2014/01/27 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
python实现目录树生成示例
2014/03/28 Python
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
TensorFlow实现模型评估
2018/09/07 Python
python 拼接文件路径的方法
2018/10/23 Python
python浪漫表白源码
2019/04/05 Python
介绍一下sql server的安全性
2014/08/10 面试题
什么是Smart Navigation?
2016/07/03 面试题
UNIX文件系统常用命令
2012/05/25 面试题
2014年学校党建工作总结
2014/11/11 职场文书
遗失说明具结保证书
2015/02/26 职场文书
春晚观后感
2015/06/11 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python
Python max函数中key的用法及原理解析
2021/06/26 Python
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android