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爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
TensorFlow实现AutoEncoder自编码器
Mar 09 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
Python实现微信好友的数据分析
Dec 16 Python
Python字符串中删除特定字符的方法
Jan 15 Python
Python守护进程实现过程详解
Feb 10 Python
Python基于内置库pytesseract实现图片验证码识别功能
Feb 24 Python
Django搭建项目实战与避坑细节详解
Dec 06 Python
python爬取微博评论的实例讲解
Jan 15 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输出xml属性的方法
2015/03/19 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
比Jquery的document.ready更快的方法
2010/04/28 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
jQuery序列化后的表单值转换成Json
2017/06/16 jQuery
AngularJS 最常用的八种功能(基础知识)
2017/06/26 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
4s店机修工岗位职责
2013/12/20 职场文书
校园安全演讲稿
2014/05/09 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
高三毕业评语
2014/12/31 职场文书
初一军训感言
2015/08/01 职场文书
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
JavaScript 反射学习技巧
2021/10/16 Javascript
vue中data里面的数据相互使用方式
2022/06/05 Vue.js
一文搞懂Java中的注解和反射
2022/06/21 Java/Android