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中用Ctrl+C终止多线程程序的问题解决
Mar 30 Python
python元组操作实例解析
Sep 23 Python
Python三种遍历文件目录的方法实例代码
Jan 19 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
Python 函数返回值的示例代码
Mar 11 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
python自动生成model文件过程详解
Nov 02 Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 Python
如何更换python默认编辑器的背景色
Aug 10 Python
python如何随机生成高强度密码
Aug 19 Python
Python实现异步IO的示例
Nov 05 Python
paramiko使用tail实时获取服务器的日志输出详解
Dec 06 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
文章推荐系统(二)
2006/10/09 PHP
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
需要发散思维学习PHP
2009/06/29 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
解密Python中的描述符(descriptor)
2015/06/03 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
Python tkinter模版代码实例
2020/02/05 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
python模块内置属性概念及实例
2021/02/18 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
西部世纪.net笔试题面试题
2014/04/03 面试题
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
元旦主持词开场白
2015/05/29 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python