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入门教程之识别验证码
Mar 04 Python
Python构建XML树结构的方法示例
Jun 30 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
Python中类的创建和实例化操作示例
Feb 27 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
Apache部署Django项目图文详解
Jul 30 Python
Python 变量的创建过程详解
Sep 02 Python
python中设置超时跳过,超时退出的方式
Dec 13 Python
python时间与Unix时间戳相互转换方法详解
Feb 13 Python
Python中如何添加自定义模块
Jun 09 Python
如何利用python发送邮件
Sep 26 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
PHP 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
深入理解php的MySQL连接类
2013/06/07 PHP
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
laravel5.6实现数值转换
2019/10/23 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
简单的Python抓taobao图片爬虫
2014/10/26 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
用matplotlib画等高线图详解
2017/12/14 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
以下的初始化有什么区别
2013/12/16 面试题
C#笔试题
2015/07/14 面试题
应征英语教师求职信
2013/11/27 职场文书
大学生毕业鉴定
2014/01/31 职场文书
军训 自我鉴定
2014/02/03 职场文书
搞笑婚前保证书
2015/02/28 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
Python语言中的数据类型-序列
2022/02/24 Python