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升级提示Tkinter模块找不到的解决方法
Aug 22 Python
Python编写电话薄实现增删改查功能
May 07 Python
django之session与分页(实例讲解)
Nov 13 Python
Django 模型类(models.py)的定义详解
Jul 19 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
解决jupyter notebook显示不全出现框框或者乱码问题
Apr 09 Python
python使用多线程+socket实现端口扫描
May 28 Python
django Model层常用验证器及自定义验证器详解
Jul 15 Python
Python变量及数据类型用法原理汇总
Aug 06 Python
python使用列表的最佳方案
Aug 12 Python
python非标准时间的转换
Jul 25 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
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
理解Javascript_03_javascript全局观
2010/10/11 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
haskell实现多线程服务器实例代码
2013/11/26 Python
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
python中int与str互转方法
2018/07/02 Python
python生成任意频率正弦波方式
2020/02/25 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
技术总监管理职责范本
2014/03/06 职场文书
旅游安全协议书
2014/04/21 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
税务会计岗位职责
2015/04/02 职场文书
小时代观后感
2015/06/10 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android