【Python基础018】在程序中怎么实现自定义抛出异常

        在上一节中,我们讲了如何对程序中的异常进行处理,但这是针对程序在运行过程中系统自动抛出的异常,而让程序被动的抛出异常在实践中也具有重要作用。

1、raise语句抛出异常

        raise 语句可以使用一个类(必须是 Exception 或者 Exception 类的子类)或异常对象抛出异常。如果使用类,系统会自动创建类的实例。具体语法如下:

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

        在语句中Exception是异常的类型(例如:NameError)参数标准异常中任一种,args是自己提供的异常参数。最后一个参数是可选的,如果存在,是跟踪异常对象。

        例如:

# 输出等级的方法,如果等级<1 则抛出异常

def typeTest(level):

    if type(level) != int:

        raise Exception('输入类型不符', level)

    print(f'您输入的是:{level}')



try:

    typeTest(1.2)

except Exception as e:

    print(e) # ('输入类型不符', 1.2)

        当输入不是整数时,程序则会运行raise语句,抛出异常,异常信息为('输入类型不符', 1.2),这个信息就是由自己来定义。

        当输入是整数时,程序则输出“您输入的是:1”

2、assert语句

        assert是python中的一个关键字,称为“断言”,使用assert语句同样可以引发异常。但与raise语句不同,当这个关键字后边的条件为假的时候,程序才会抛出AssertionError的异常。assert语句的语法格式如下:

assert condition

        如果condition为false,那么程序抛出AssertionError异常

        用法1

assert 1 == 2

        正如assert翻译的意思“断言”,当程序运行到某个节点的时候,就断定某个变量的值必然是什么,或者对象必然拥有某个属性等,简单说就是断定什么东西必然是什么,如果不是,就会抛出错误。

        用法2

class Account:

    def __ init__(self):

        self.balance = 0

    def cal(self, amount):

        assert amount > 0

        self.balance += amount



if __ name__ == '__ main__':

    a = Account()

    a.cal(-10)

        从上面代码可以看出,cal()方法的参数 amount 值必须大于零的,如果不满足条件就会报错。一般来说assert相当于在程序中置入了一个检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作。

3、自定义异常

        在 Python 中,可以通过继承 Exception 类来创建自己的异常称为自定义异常。异常类和其他的类并没有区别。最简单的自定义异常类就是一个空的 Exception 类的子类。语法格式如下:

class MyException(Exception):

        pass        

        下面通过继承 Exception 类来生成一个 SexException 类。如果给 Student 类的属性 sex赋值时候,如果不是“男”或者“女”就抛出自定义的 SexException。示例如下:

​
# 自定义异常

class SexException(Exception):

    def __ init__(self, msg):

        self.msg = msg

class Student:

    def __ init__(self, name):

        self.name = name

        # self.__sex = sex

    @ property

    def sex(self):

        return self.__sex

    @sex.setter

    def sex(self, sex):

        if sex == '男' or sex == '女':

            self.__sex = sex

        else:

            raise SexException('性别的参数值不正确,只能是男或者女')

    def __ str__(self):

        return '姓名:{0},性别:{1}'.format(self.name,self.__sex)


s1=Student('张三')

s1.sex = 'abc' #给 s1 的属性 sex 赋值,

print(s1)

​

        从上面的代码中可以看出,对 sex 属性赋值时候有可能有异常,需要进行捕获异常。

  ​
#自定义异常

class SexException(Exception):

    def __ init__(self, msg):

        self.msg = msg

class Student:

    def __ init__(self,name):

        self.name=name

        # self.__sex=sex

    @property

    def sex(self):
    
        return self.__sex

    @sex.setter

    def sex(self,sex):

        if sex=='男' or sex=='女':

            self.__sex=sex

        else:

            raise SexException('性别的参数值不正确,只能是男或者女')

    def __ str__(self):

        return '姓名:{0},性别:{1}'.format(self.name,self.__sex)


s1=Student('张三')

try:

    s1.sex='abc' # 给 s1 的属性 sex 赋值,

    print(s1)

except Exception as e:

    print(e)

​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/361559.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++-内存管理(1)

1. C/C内存分布 首先我们需要知道&#xff0c;在C中的内存分为5个区。 1. 栈 又叫堆栈 -- 非静态局部变量 / 函数参数 / 返回值等等&#xff0c;栈是向下增长的。 2. 内存映射段 是高效的 I/O 映射方式&#xff0c;用于装载一个共享的动态内存库。用户可使用系统接口 创建…

解说 AIGC(人工智能生成内容) 是什么?

前言 AIGC (AI Generated Content)即人工智能生成内容,一般认为是相对于PCG(专业生成内容)、UCG(用户生成内容)而提出的概念。AIGC狭义概念是利用AI自动生成内容的生产方式。广义的AIGC可以看作是像人类一样具备生成创造能力的AI技术,即生成式AI,它可以基于训练数据和生成算法…

漏洞原理SSRF漏洞

漏洞原理SSRF漏洞 服务器请求伪造 SSRF(Server Side Request Forgery)是一种服务器端请求伪造漏洞。它允许攻击者利用后端服务器来发送未经授权的请求。攻击者可以通过修改请求的目标地址,将请求发送到内部网络或其他受信任的服务器上,从而绕过防火墙和访问控制。 SSRF漏洞…

redis使用Big key的问题

文章目录 BigKey带来的问题业务场景具体现象解决思路 BigKey带来的问题 客户端执行命令的时延变大&#xff1a;对大Key进行的慢操作会导致后续的命令被阻塞&#xff0c;从而导致一系列慢查询。 引发操作阻塞&#xff1a;Redis内存达到maxmemory参数定义的上限引发操作阻塞或重…

2016年苏州大学837复试机试C/C++

2016年苏州大学复试机试 第一题 题目 公鸡5元一只&#xff0c;母鸡3元一只&#xff0c;幼鸡1元3只。若100元钱买了100只鸡&#xff0c;问其中公鸡、母鸡、幼鸡各多少只&#xff1f; 博主注&#xff1a;此题经典百元买百鸡问题&#xff0c;出自&#xff1a;公元5世纪末&#…

mysql 允许其他ip访问

1.改表法。 可能是你的帐号不允许从远程登陆&#xff0c;只能在localhost。这个时候只要在localhost的那台电脑&#xff0c;登入mysql后&#xff0c;更改 “mysql” 数据库里的 “user” 表里的 “host” 项&#xff0c;从"localhost"改称"%" //执行以下…

基础知识总结

概念概述 计算机网络是通过传输介质、通信设施和网络通信协议&#xff0c;把分散在不同地点的计算机设备互连起来&#xff0c;实现资源共享和数据传输的系统。而网络编程就是编写程序使联网的两个或多个设备&#xff08;比如计算机&#xff09;之间进行数据传输。Java语言对网…

JRT人大金仓测试

之前基于IRIS导出的Sql脚本用JRT的导表脚本执行Sql语句在PostGreSql数据库把IRIS导出的库还原。并且试了模板设计器的打开和保存及打印功能。本次测试IRIS导出的Sql在人大金仓上还原数据库&#xff0c;并且测试模板设计器功能和打印。 首先碰到的一个坑是人大金仓把空串存成NU…

P1228 地毯填补问题(葬送的芙蓉王【bushi】)

地毯填补问题 题目描述 相传在一个古老的阿拉伯国家里&#xff0c;有一座宫殿。宫殿里有个四四方方的格子迷宫&#xff0c;国王选择驸马的方法非常特殊&#xff0c;也非常简单&#xff1a;公主就站在其中一个方格子上&#xff0c;只要谁能用地毯将除公主站立的地方外的所有地…

Vue Router 动态路由

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介1. 动态路由的使用2. 动态路由的原理解析路由匹配路由参数的传递组件渲染动态路由的变化 3. 更多动态路由的实例3.1. 动态路径匹配多层级3.2. 动态路径的正则匹配3.3. 编程式导航与动态路由 总结 ⭐ 写在最后 ⭐ 专栏简介 Vue学习之…

CSS 3D三角彩色锥形旋转动画效果

<template><view class="pyramid-loader"><view class="wrapper"><span class="side side1"></span> <!-- 金字塔的一个面 --><span class="side side2"></span> <!-- 金字塔的…

会计试算平衡

目录 一. 试算平衡的意义二. 试算平衡的原理和内容三. 试算平衡表 \quad 一. 试算平衡的意义 \quad ①验证错误 ②便于编制会计报表 试算表根据各分类账借贷余额汇总编制而成&#xff0c;依据试算表编制会计报表将比直接依据分类账来编制更为方便,拥有大量分类账的企业尤为便捷…

浙大发布Agent学习框架,13B 模型达到 ChatGPT 水平!

2023 年下半年&#xff0c;AI Agent 正式开启「大模型下半场」。 自“人工智能”这门学科创立之初&#xff0c;一种可以“观察世界”-“思考推理”-“做出行动”-“反思学习”的人造代理就是构建通用人工智能的终极目标之一。而基于大模型的 AI Agent 借助大模型强大的推理判断…

(天坑的87端口)nginx代理端口不生效,代理87端口遇到的问题及原因

目录 一. 问题产生 二.问题现象 三.问题排查 四.柳暗花明 五.解决方案 六.不安全的端口号 七.总结 一. 问题产生 因为之前的一个项目一直是用的86端口&#xff0c;这次要在一台新的服务器上重新部署两个项目&#xff0c;很自然而然的继续86端口&#xff0c;另一个也没想&…

【数据结构与算法】之哈希表系列-20240130

这里写目录标题 一、383. 赎金信二、387. 字符串中的第一个唯一字符三、389. 找不同四、409. 最长回文串五、448. 找到所有数组中消失的数字六、594. 最长和谐子序列 一、383. 赎金信 简单 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不…

C++/MFC:在窗体Form(Dialog)中多个编辑框时,在输入时将回车解释为TAB键,将输入焦点移到下一个编辑框的方法

很多时候&#xff0c;为了输入方便&#xff0c;常用的做法&#xff0c;就是将回车键解释为将输入焦点移动到下一个编辑框中。就像是我的VxTerm中的快速连接输入一样&#xff1a; VxTerm是一个国产化替代的SSH工具&#xff0c;可以从本站的资源中免费下载并且免费使用&#xff…

R高级绘图 | P1 | 带边缘分布散点图 | 代码注释 + 结果解读

新系列 —— R高级绘图&#xff0c;准备整理所有曾经绘制过的图图和未来需要的图图们的代码&#xff01;预计这个系列会囊括所有常见图形&#xff0c;只提供高级绘图代码&#xff0c;基础绘图主要在 R语言绘图 系列中进行介绍&#xff0c;这个系列咱们主打&#xff1a;需要XX图…

数学公式OCR识别php 对接mathpix api 使用公式编译器

数学公式OCR识别php 对接mathpix api 一、注册账号官网网址&#xff1a;https://mathpix.com 二、该产品支持多端使用注意说明&#xff08;每月10次&#xff09; 三、api 对接第一步创建create keyphp对接api这里先封装两个请求函数&#xff0c;get 和post &#xff0c;通过官方…

Kotlin快速入门系列11

Kotlin的集合 集合类 Java类库有一套相当完整的容器集合类用来持有对象。跟Java一样&#xff0c;集合类存放的都是对象的引用&#xff0c;而非对象本身(我们经常说的集合指的是集合中对象的引用)&#xff0c;Kotlin的集合类是在Java的集合类库基础上进行的优化&#xff0c;新引…

拥抱变局,坚韧向新|复旦大学-华盛顿大学EMBA项目C20毕业典礼

12月初&#xff0c;复旦大学-华盛顿大学EMBA项目20班的学员们前往美国&#xff0c;完成了项目最后一次移动课堂&#xff0c;并在奥林商学院举办了毕业典礼。      20班的学员们在项目20周年之际入学&#xff0c;也是疫情以来第一个正式恢复线下授课的班级。虽然经历了一些波…