Python用户自定义异常的实现


Posted in Python onDecember 25, 2020

实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时候你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承。

常见的内置异常有:

Python用户自定义异常的实现

1.自定义异常类型

#1.用户自定义异常类型,只要该类继承了Exception类即可,至于类的主题内容用户自定义,可参考官方异常类
class TooLongExceptin(Exception):
  "this is user's Exception for check the length of name "
  def __init__(self,leng):
    self.leng = leng
  def __str__(self):
    print("姓名长度是"+str(self.leng)+",超过长度了")

2.如何手动抛出异常:raise

系统的自带的异常只要触发会自动抛出,比如NameError,但用户自定义的异常需要用户自己决定什么时候抛出。
raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。大多数的异常的名字都以"Error"结尾,所以实际命名时尽量跟标准的异常命名一样。

#1.用户自定义异常类型
class TooLongExceptin(Exception):
  "this is user's Exception for check the length of name "
  def __init__(self,leng):
    self.leng = leng
  def __str__(self):
    print("姓名长度是"+str(self.leng)+",超过长度了")
 
#2.手动抛出用户自定义类型异常
def name_Test():
    name = input("enter your naem:")
    if len(name)>4:
      raise TooLongExceptin(len(name)) #抛出异常很简单,使用raise即可,但是没有处理,即捕捉
    else :
      print(name)
 
#调用函数,执行
name_Test()
-----------------执行时满足条件后抛出一个用户定义的异常如下:--------------------------------------
enter your naem:是打发斯蒂芬
Traceback (most recent call last):
姓名长度是6,超过长度了
 File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 21, in <module>
  name_Test()
__main__.TooLongExceptin: <exception str() failed>

3.捕捉用户手动抛出的异常

#1.捕捉用户手动抛出的异常,跟捕捉系统异常方式一样
def name_Test():
  try:
    name = input("enter your naem:")
    if len(name)>4:
      raise TooLongExceptin(len(name))
    else :
      print(name)
 
  except TooLongExceptin,e_result: #这里异常类型是用户自定义的
    print("捕捉到异常了")
    print("打印异常信息:",e_result)
 
#调用函数,执行
name_Test()
==========执行结果如下:==================================================
enter your naem:aaafsdf
捕捉到异常了
Traceback (most recent call last):
打印异常信息: 姓名长度是7,超过长度了
姓名长度是7,超过长度了
 File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 16, in name_Test
  raise TooLongExceptin(len(name))
__main__.TooLongExceptin: <exception str() failed>
 
During handling of the above exception, another exception occurred:
 
Traceback (most recent call last):
 File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 26, in <module>
  name_Test()
 File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 22, in name_Test
  print("打印异常信息:",e_result)
TypeError: __str__ returned non-string (type NoneType)

到此这篇关于Python用户自定义异常的实现的文章就介绍到这了,更多相关Python 自定义异常内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现字符串中字符分类及个数统计
Sep 28 Python
python实现flappy bird小游戏
Dec 24 Python
python2使用bs4爬取腾讯社招过程解析
Aug 14 Python
如何运行带参数的python脚本
Nov 15 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
python模式 工厂模式原理及实例详解
Feb 11 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
Django Channel实时推送与聊天的示例代码
Apr 30 Python
详解python内置模块urllib
Sep 09 Python
python time()的实例用法
Nov 03 Python
Django前后端分离csrf token获取方式
Dec 25 #Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 #Python
python语言time库和datetime库基本使用详解
Dec 25 #Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 #Python
用python对excel进行操作(读,写,修改)
Dec 25 #Python
python Pexpect模块的使用
Dec 25 #Python
Python中读取文件名中的数字的实例详解
Dec 25 #Python
You might like
phpnow php探针环境检测代码
2014/11/04 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
万能的php分页类
2017/07/06 PHP
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
js面向对象的写法
2016/02/19 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
js实现内置计时器
2019/12/16 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
深入了解Django中间件及其方法
2019/07/26 Python
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
python logging.info在终端没输出的解决
2020/05/12 Python
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
热能动力工程毕业生自荐信
2013/11/07 职场文书
大学生个人自我鉴定
2013/12/03 职场文书
天网工程实施方案
2014/03/26 职场文书
大型营销活动计划书
2014/04/28 职场文书
医院科室评语
2015/01/04 职场文书
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js