当前位置: 首页 > news >正文

[python入门㊽] - 自定义异常 raise 关键字

目录

❤  自定义抛出异常关键字 - raise

❤  使用raise主动引发异常

❤  raise 关键字的用法

❤  触发异常

❤  自定义异常类


在前面我们学过异常三个关键字分别是try、except 以及 finally

在编程过程中合理的使用异常可以使得程序正常的执行。有直接抛出异常的形式,也能通过捕获异常加入异常时的业务逻辑处理。

❤  自定义抛出异常关键字 - raise

raise 关键字的功能:可以将信息已报错的形式抛出

当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。

❤  使用raise主动引发异常

raise 异常名

raise 异常名, 附加数据

raise 类名

❤  raise 关键字的用法

try:s = Noneif s is None:print "s 是空对象"raise NameError     #如果引发NameError异常,后面的代码将不能执行print len(s)  #这句不会执行,但是后面的except还是会走到
except TypeError:print "空对象没有长度"s = None
if s is None:raise NameError 
print 'is here?' #如果不使用try......except这种形式,那么直接抛出异常,不会执行到这里

❤  触发异常

我们可以使用raise语句自己触发异常

raise语法格式如下:

raise [Exception [, args [, traceback]]]

语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。

最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

实例:

一个异常可以是一个字符串,类或对象。 Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。

定义一个异常非常简单,如下所示:

def functionName( level ):if level < 1:raise Exception("Invalid level!", level)# 触发异常后,后面的代码就不会再执行

注意:为了能够捕获异常,"except"语句必须有用相同的异常来抛出类对象或者字符串

例如我们捕获以上异常,"except"语句如下所示:

try:
    正常逻辑
except Exception,err:
    触发自定义异常   
else:
    其余代码

实例: 

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 定义函数
def mye( level ):if level < 1:raise Exception,"Invalid level!"# 触发异常后,后面的代码就不会再执行
try:mye(0)            # 触发异常
except Exception,err:print 1,err
else:print 2

执行以上代码,输出结果为:

$ python test.py
1 Invalid level!

python3.6以后 改为:

def mye( level ):if level < 1:raise Exception("Invalid level!")# 触发异常后,后面的代码就不会再执行
try:mye(0)            # 触发异常
except Exception as err:print(1,err)
else:print(2)

 ❤  自定义异常类

python的异常分为两种

  • 内建异常,就是python自己定义的异常。
  • 不够用,用户自定义异常

首先看看python的异常继承树  

我们可以看到python的异常有个大基类。然后继承的是Exception。所以我们自定义类也必须继承Exception。

创建自定义异常类案例

class MyException(Exception):def __init__(self, msg):''':param msg: 异常信息'''self.msg = msg
#最简单的自定义异常
class FError(Exception):pass

 抛出异常、用try-except抛出

try:raise FError("自定义异常")
except FError as e:print(e)

实例:

class CustomError(Exception):def __init__(self,ErrorInfo):super().__init__(self) #初始化父类self.errorinfo=ErrorInfodef __str__(self):return self.errorinfoif __name__ == '__main__':try:raise CustomError('客户异常')except CustomError as e:print(e)

总结:

  • 自定义异常必须继承基类:Exception
  • 需要在构造函数中自定义错误的信息
http://www.lryc.cn/news/12301.html

相关文章:

  • DDOS攻击
  • 网络编程套接字
  • 海量数据相似数据查询方法
  • Codeforces Round #822 (Div. 2)
  • 华为OD机试 - 最短木板长度(JS)
  • java设计模式——观察者模式
  • linux高级命令之线程的注意点
  • MyBatisPlus ---- 多数据源
  • Java多线程
  • linux高级命令之线程执行带有参数的任务
  • 管理会计报告和财务报告的区别
  • 华为OD机试 - 最左侧冗余覆盖子串(Python) | 机试题算法思路 【2023】
  • 【Opencv 系列】第1章 图像基础
  • 创建和销毁对象——遇到多个构造器参数时要考虑使用构建器
  • 【c++学习】入门c++(中)
  • 论文阅读_AlphaGo_Zero
  • 一文教你用Python创建自己的装饰器
  • 华为OD机试 - 任务总执行时长(JS)
  • pytorch离线快速安装
  • 华为OD机试 - 数组合并(JS)
  • 不要让GPT成为你通向“学业作弊”的捷径——使用GPT检测工具来帮助你保持正确的方向
  • 基于matlab的斜视模式下SAR建模
  • 15-基础加强-1-类加载器反射
  • 基于SSM,Spring, BootStrap 毕业设计管理系统的设计与实现
  • 一招鉴别真假ChatGPT,并简要介绍ChatGPT、GPT、GPT2和GPT3模型之间的区别和联系
  • 华为OD机试 - 特异性双端队列(JS)
  • Nginx自动封禁可疑Ip
  • 分布式事务--理论基础
  • Matlab数学建模常用算法及论文插图绘制模板资源合集
  • C语言【动态内存管理 后篇】