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生成词云的实现方法(推荐)
Jun 13 Python
基于Django filter中用contains和icontains的区别(详解)
Dec 12 Python
Python类的继承和多态代码详解
Dec 27 Python
python取代netcat过程分析
Feb 10 Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
解决python3 requests headers参数不能有中文的问题
Aug 21 Python
Python处理session的方法整理
Aug 29 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
Python openpyxl 插入折线图实例
Apr 17 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 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
php.ini中文版
2006/10/09 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
javascript 面向对象编程基础:继承
2009/08/21 Javascript
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
微信小程序 toast 详解及实例代码
2016/11/09 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
Weex开发之地图篇的具体使用
2019/10/16 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
教你怎样写好自我评价
2013/10/05 职场文书
护士长竞聘书
2014/03/31 职场文书
保险公司演讲稿
2014/09/02 职场文书
喋血孤城观后感
2015/06/08 职场文书
员工考勤管理制度
2015/08/06 职场文书
家访教师心得体会
2016/01/23 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android