自定义异常 raise 关键字

2023-11-04

目录

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

❤  使用raise主动引发异常

❤  raise 关键字的用法

❤  触发异常

❤  自定义异常类


python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm=1001.2014.3001.5502

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

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

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

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

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

❤  使用raise主动引发异常

raise 异常名

raise 异常名, 附加数据

raise 类名

❤  raise 关键字的用法

try:
     s = None
     if 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=ErrorInfo
    def __str__(self):
        return self.errorinfo

if __name__ == '__main__':
    try:
        raise CustomError('客户异常')
    except CustomError as e:
        print(e)

总结:

  • 自定义异常必须继承基类:Exception
  • 需要在构造函数中自定义错误的信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义异常 raise 关键字 的相关文章

随机推荐

  • saltstack常用操作----salt-api 实现 通过http请求远程调用saltstack的步骤

    在master主机上面执行如下操作 1 创建登录的用户名和密码 useradd username pwsswd username 2 修改master的配置文件 进入下面的目录 cd etc salt maaster d touch eau
  • Firefox OS

    参考1 http www firefoxos cc thread 348 1 1 html 1月7日 Mozilla中国去的工程师在深圳腾讯大厦举办了Firefox新版本体验活动 其中一个话题是关于Mozilla Boot to Gecko
  • error LNK1104: 无法打开文件“****.lib”解决

    做Opencv项目时 在vs2010中导入opencv 出现了很多类似 error LNK1104 无法打开文件 lib 这样的错误 在网上找了一些方法说需要添加链接库 添加相应的lib库后还是不行 最后发现导入opencv的lib库是没有
  • python中使用gdal,osgeo

    目的 实现from osgeo import gdal 工具 win10 vc2015 gdal 2 2 2 download osgeo org gdal 2 2 2 用的13M的那个 我估计是64位的 就按64位操作了 py3 5 an
  • java cdn加速_webpack 引入 CDN 加速

    webpack 引入 cdn 加速 用比较流行的 vue webpack 来说明好了 1 在SPA模版入口页面 项目根目录下的 index html 中引入 CDNvue webpack cdn 2 在配置文件 build webpack
  • java.lang.NoclassDefFoundError:com/google/common/base/MoreObjects

    1 一次项目中编译出现错误 出现这种错误一般是因为我们的项目中集成了swagger 应为swagger是需要依赖于guava 所以会出现这种错误 2 在项目的pom 文件中添加guava依赖即可
  • hbase总结:如何监控region的性能

    转载 http ju outofmemory cn entry 50064 随着大数据表格应用的驱动 我们的HBase集群越来越大 然而由于机器 网络以及HBase内部的一些不确定性的bug 使得系统面临着一些不确定性的故障 因此 HBas
  • 腾讯笔试题:猜字游戏---猜1-100之间一个数字,最少多少次?第一次猜的数是几?

    题目 A B两人玩猜字游戏 游戏规则如下 A选定一个 1 100 之间的数字背对B写在纸上 然后让B开始猜 如果B猜的偏小 A会提示B这次猜的偏小 一旦B某次猜的偏大 A就不再提示 此次之后B猜的偏小A也不会再提示 只回答猜对与否 请问 B
  • 虚拟机vmare16使用u盘装安装ghost系统

    对于想要用vmware16U盘装系统的朋友来说 vmware16U盘装系统教程图解是非常重要的 但是如果手上没有vmware16U盘装系统操作步骤 怎么办好呢 注意以下文章为转载来的 所以vmware的版本是10为例的 本人亲测vm16也是
  • c++智能指针介绍之weak_ptr (&enable_shared_from_this)

    c 智能指针介绍之weak ptr c 11引入 头文件在
  • 使用navicat模型功能 快速理清表间关系

    模型 是一个用于创建和操作数据库模型的强大工具 在主窗口中 点击 模型 来打开模型的对象列表 注意 仅适用于 MySQL Oracle PostgreSQL SQLite SQL Server 和 MariaDB 一些主要的功能如下 创建和
  • CSS —— line-height详解

    本文导读 行高 指一行文子的高度 具体来说是指两行文子间基线间的距离 在CSS line height被用来控制行与行之间的垂直距离 line height 属性会影响行框的布局 在应用到一个块级元素时 它定义了该元素中基线之间的最小距离而
  • c语言蜂鸣声音音乐代码

    include include
  • 单例(Singleton)设计模式

    单例 Singleton 设计模式 1 概念 某个类只能存在一个对象实例 并且该类只提供一个取得该对象实例的方法 2 实现方式 懒汉式 这种写法线程不安全 package com lmwei p20 import com sun org a
  • SQL 高级查询

    select from score select from Student 统计函数 count总数 max最大 min最小 avg平均 sum求和 count select count from Student max select ma
  • 公有链VS联盟链

    相信有人也听说过区块链分为公有链 私有链和联盟链 那么 它们三者有何区别 业内外人士对于该采用哪种类型的区块链看法不一 并引发了诸多围绕公有链 联盟链与私有链的争论 但是业内普遍认为联盟链与私有链实属一类 目前金融机构多偏向私有链 但也有人
  • 详解vue中diff算法

    详解vue中diff算法 vue中diff算法 作用 1 真实DOM和虚拟DOM 2 diff的比较方式 diff涉及到的函数 总结 vue中diff算法 本质 找出两个对象之间的差异 核心 子节点数组进行比较 首尾两端对比 作用 渲染真实
  • halcon——缺陷检测常用方法总结(模板匹配(定位)+差分)

    引言 机器视觉中缺陷检测分为一下几种 blob分析 特征 模板匹配 定位 差分 光度立体 halcon 缺陷检测常用方法总结 光度立体 唯有自己强大 博客园 cnblogs com 特征训练 测量拟合 频域 空间域结合 halcon 缺陷检
  • 射极跟随器实验报告数据处理_射极跟随器实验报告

    射极跟随器实验报告 由会员分享 可在线阅读 更多相关 射极跟随器实验报告 3页珍藏版 请在人人文库网上搜索 1 实验六 射极跟随器一 实验目的l 掌握射极跟随器的特性及测量方法 2 进一步学习放大器各项参数的测量方法 二 实验原理下图为射极
  • 自定义异常 raise 关键字

    目录 自定义抛出异常关键字 raise 使用raise主动引发异常 raise 关键字的用法 触发异常 自定义异常类 python从小白到总裁完整教程目录 https blog csdn net weixin 67859959 articl