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中的pass语句使用方法讲解
May 14 Python
python实现马耳可夫链算法实例分析
May 20 Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
python的turtle库使用详解
May 10 Python
python代码编写计算器小程序
Mar 30 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
Python zip函数打包元素实例解析
Dec 11 Python
Python pandas库中的isnull()详解
Dec 26 Python
python 利用zmail库发送邮件
Sep 11 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 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
php工具型代码之印章抠图
2018/07/18 PHP
javascript写的一个链表实现代码
2009/10/25 Javascript
JS获取整个页面文档的实现代码
2011/12/15 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
python async with和async for的使用
2019/06/20 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
详解python的super()的作用和原理
2020/10/29 Python
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
几道PHP面试题
2013/04/14 面试题
绩效考核实施方案
2014/03/18 职场文书
询价采购方案
2014/06/09 职场文书
销售口号大全
2014/06/11 职场文书
优秀大学生自荐信
2015/03/26 职场文书
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js