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查询mysql中文乱码问题
Nov 09 Python
Python使用PIL库实现验证码图片的方法
Mar 11 Python
Python中表达式x += y和x = x+y 的区别详解
Jun 20 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
Apr 20 Python
python实现简单登陆系统
Oct 18 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
Python面向对象之Web静态服务器
Sep 03 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
Python3.9.1中使用split()的处理方法(推荐)
Feb 07 Python
python turtle绘图
May 04 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
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
jQuery 表格工具集
2010/04/25 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
Python之PyUnit单元测试实例
2014/10/11 Python
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
python实现维吉尼亚加密法
2019/03/20 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
工程专业求职自荐书范文
2014/02/08 职场文书
学习雷锋倡议书
2014/04/15 职场文书
食品安全宣传标语
2014/06/07 职场文书
城市创卫标语
2014/06/17 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
2015年见习期工作总结
2014/12/12 职场文书
预备党员转正材料
2014/12/19 职场文书
高中物理教学反思
2016/02/19 职场文书
python装饰器代码解析
2022/03/23 Python