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和shell变量互相传递的几种方法
Nov 20 Python
使用grappelli为django admin后台添加模板
Nov 18 Python
Python实现快速排序和插入排序算法及自定义排序的示例
Feb 16 Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 Python
Python实现随机生成手机号及正则验证手机号的方法
Apr 25 Python
Python 删除整个文本中的空格,并实现按行显示
Jul 24 Python
在Python中定义一个常量的方法
Nov 10 Python
python读取txt文件中特定位置字符的方法
Dec 24 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
Django 实现图片上传和下载功能
Dec 31 Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 Python
Python中全局变量和局部变量的理解与区别
Feb 07 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
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
php Session无效分析资料整理
2016/11/29 PHP
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
理解javascript中的闭包
2017/01/11 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
js动态添加带圆圈序号列表的实例代码
2021/02/18 Javascript
Vue中避免滥用this去读取data中数据
2021/03/02 Vue.js
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Python3处理HTTP请求的实例
2018/05/10 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
机械工程师求职自我评价
2013/09/23 职场文书
学校安全工作制度
2014/01/19 职场文书
运动会班级口号
2014/06/09 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
个人工作表现自我评价
2015/03/06 职场文书
MySQL中一条update语句是如何执行的
2022/03/16 MySQL
Python学习之包与模块详解
2022/03/19 Python
使用Python开发冰球小游戏
2022/04/30 Python