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 测试实现方法
Dec 24 Python
python解析html开发库pyquery使用方法
Feb 07 Python
python求素数示例分享
Feb 16 Python
python使用装饰器和线程限制函数执行时间的方法
Apr 18 Python
Python中的__slots__示例详解
Jul 06 Python
Python文本统计功能之西游记用字统计操作示例
May 07 Python
Python List cmp()知识点总结
Feb 18 Python
如何在Django配置文件里配置session链接
Aug 06 Python
详解python中docx库的安装过程
Nov 08 Python
Python实现汇率转换操作
May 03 Python
pytorch中的weight-initilzation用法
Jun 24 Python
如何使用pdb进行Python调试
Jun 30 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
2019十大人气国漫
2020/03/13 国漫
php知道与问问的采集插件代码
2010/10/12 PHP
PHP图片库imagemagick安装方法
2014/09/23 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
2019/06/04 jQuery
vue 集成jTopo 处理方法
2019/08/07 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
js实现飞机大战小游戏
2020/08/26 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
python路径的写法及目录的获取方式
2019/12/26 Python
Django数据统计功能count()的使用
2020/11/30 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
澳大利亚男士西服品牌:M.J.Bale
2018/02/06 全球购物
《挑山工》的教学反思
2014/02/16 职场文书
项目合作协议书范本
2014/04/16 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
年终晚会活动方案
2014/08/21 职场文书
2014年关工委工作总结
2014/11/17 职场文书
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL