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实现以时间换空间的缓存替换算法
Feb 19 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
python使用正则表达式来获取文件名的前缀方法
Oct 21 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
pytorch 自定义参数不更新方式
Jan 06 Python
SpringBoot实现登录注册常见问题解决方案
Mar 04 Python
python实现超级马里奥
Mar 18 Python
Python如何读写字节数据
Aug 05 Python
pandas DataFrame.shift()函数的具体使用
May 24 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中的boolean(布尔)类型详解
2013/10/28 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
重定向实现代码
2006/11/20 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
js数组去重的5种算法实现
2015/11/04 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
vue构建动态表单的方法示例
2018/09/22 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
Python群发邮件实例代码
2014/01/03 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
python 排序算法总结及实例详解
2016/09/28 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
PyTorch的torch.cat用法
2020/06/28 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
解决Python安装cryptography报错问题
2020/09/03 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
美德少年事迹材料
2014/01/23 职场文书
商场消防演习方案
2014/02/12 职场文书
教师师德反思材料
2014/02/15 职场文书
碧霞祠导游词
2015/02/09 职场文书
作息时间调整通知
2015/04/22 职场文书
2016国培学习心得体会
2016/01/08 职场文书
python 单机五子棋对战游戏
2022/04/28 Python
vue实现登陆页面开发实践
2022/05/30 Vue.js
Java Spring读取和存储详细操作
2022/08/05 Java/Android