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编程中的包结构
Oct 25 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
python实现批量修改文件名代码
Sep 10 Python
python虚拟环境virtualenv的使用教程
Oct 20 Python
python 显示数组全部元素的方法
Apr 19 Python
IntelliJ IDEA安装运行python插件方法
Dec 10 Python
python版本五子棋的实现代码
Dec 11 Python
Python3标准库总结
Feb 19 Python
python如何判断IP地址合法性
Apr 05 Python
Python timeit模块原理及使用方法
Oct 10 Python
python爬虫破解字体加密案例详解
Mar 02 Python
python数字图像处理之图像的批量处理
Jun 28 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中header用法小结
2016/05/23 PHP
JavaScript 变量基础知识
2009/11/07 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
Python中的super用法详解
2015/05/28 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
创先争优活动方案
2014/02/12 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
公安学专业求职信
2014/07/27 职场文书
创先争优活动心得体会
2014/09/04 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书