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 27 Python
Python中字典的浅拷贝与深拷贝用法实例分析
Jan 02 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
CentOS7安装Python3的教程详解
Apr 10 Python
python制作填词游戏步骤详解
May 05 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
Python 点击指定位置验证码破解的实现代码
Sep 11 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
Nov 08 Python
关于numpy.where()函数 返回值的解释
Dec 06 Python
如何利用Python识别图片中的文字
May 31 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 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
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
php引用传值实例详解学习
2013/11/06 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python操作串口的方法
2015/06/17 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
python已协程方式处理任务实现过程
2019/12/27 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
课堂教学改革实施方案
2014/03/17 职场文书
员工安全生产责任书
2014/07/22 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
关于做家务的心得体会
2016/01/23 职场文书
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android