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的Twisted框架构建非阻塞下载程序的实例教程
May 25 Python
利用Python生成文件md5校验值函数的方法
Jan 10 Python
python中安装模块包版本冲突问题的解决
May 02 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
python正向最大匹配分词和逆向最大匹配分词的实例
Nov 14 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
Python如何省略括号方法详解
Mar 21 Python
解决Django no such table: django_session的问题
Apr 07 Python
Python3 多线程(连接池)操作MySQL插入数据
Jun 09 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 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python实现CET查分的方法
2015/03/10 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
python安装及变量名介绍详解
2020/12/12 Python
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
团结就是力量演讲稿
2014/05/21 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
质检员岗位职责
2015/02/03 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers