5. Python中的异常处理和自定义异常问题

news/2025/3/15 21:14:22/

1. 说明:

自己写的代码保证万无一失有点难度,代码报出异常后,对其进行正确的处理有助于提高开发产品的稳定性和灵活性。

2. try…except 处理异常

这个是在python当中用来处理异常的,在try…except中的代码会正常执行,如果没有出现异常则跳过except代码块并结束try-except,如果try-except中的某一句代码出现了问题异常,剩余代码停止执行,如果出现的异常与except所指定的一致,则执行except中的代码块,异常处理结束整个应用程序继续执行,如果出现的异常与except中指定的不符合,那么则跳出try语句,程序继续抛出异常并终止执行代码,同时也会结合else或者finally来处理,简单使用如下:

nums = [1, 2, 3, 4]try:print(nums.encode('utf-8'))print('123')
except NameError:print('发生特定异常情况')
except (AttributeError, NameError, KeyError):  # 接收多种异常情况print('发生多种异常情况')
except:print('接收所有的异常情况')
else:print('上面的代码如果没有异常,则执行这里的代码')
finally:print('不管上面有没有异常,都会执行的代码')

3. 获取异常相关信息

有时需要知道异常报错的类型,才能根据类型进行不同的处理。获取异常信息的方式可分为两种:
第一种:使用Exception类本身

nums = [1, 2, 3, 4]try:print(nums.encode('utf-8'))print('123')
except Exception as e:print(e.args)  # 输出异常的简要信息print(type(e).__name__)  # 输出异常的类型名称

输出如下,可看到输出的信息是比较简单的,不过这种方法可以获得异常的类型名
在这里插入图片描述
第二种:使用traceback包
这种方式可输出异常的详细信息,包括出错代码在哪个文件的哪一行,异常类型等

import tracebacknums = [1, 2, 3, 4]try:print(nums.encode('utf-8'))print('123')
except:print(traceback.format_exc())

输出如下:
在这里插入图片描述

4. 主动抛出异常

可以使用 raise 语句来抛出异常,该语句后面需要带一个对象,该对象必须是派生自 Exception。

nums = [1, 2, 3, 4]try:num = 5if num in nums:print(num)else:myException = Exception("变量不在列表内...")	# 创建一个异常对象raise myException	# 主动抛出异常
except Exception as err:	# 接受异常,err的内容就是错误原因print(err)	# 输出异常信息(或者针对异常做其他处理)

5. 自定义异常类

第一:一定要继承Exception
第二:要重新定义 init 和 __str__函数

nums = [1, 2, 3, 4]# 继承异常基类 Exception
class myError(Exception):# 下面两个魔法函数是必须要写的# __init__函数负责类变量的初始化(一般是接报错的内容)def __init__(self, message):self.message = message# __str__函数负责根据类对象名称,返回异常信息def __str__(self):return "出现错误:" + self.messagetry:num = 5if num in nums:print(num)else:myerror = myError("数字不在列表内")  # 创建一个自定义异常类型的变量raise myerror  # 手动抛出异常
except Exception as err:print(err)

持续更新中,请大家多多关注…


http://www.ppmy.cn/news/34337.html

相关文章

【人工智能】— CSP约束满足问题、回溯搜索、启发式

【人工智能】— 约束满足问题约束满足问题 CSP示例:地图着色约束图CSP的种类约束类型举例:密码算法现实世界的CSP标准搜索公式回溯搜索改进回溯搜索的效率最少剩余值启发式度启发式最少约束值启发式Forward checking—前向检验Constraint propagation — 约束传播约…

【面试】什么是网关/服务网关?网关/服务网关的作用是什么?

文章目录一、前言二、网关2.1 什么是网关?2.2 网关的作用是什么?2.3 网关的工作流程2.4 软件系统网关三、什么是服务网关四、为什么需要服务网关五、服务网关应用一、前言 对于网关,从专业角度,一般运维和网络管理员会比较了解一…

Spring Boot 3.0系列【19】核心特性篇之自定义Starter启动器

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言Starter 机制自动配置starter 包自定义Starter启动器1. 模块命名规则2. 模块结构规则3. 添加依赖4. 添加属性配置类5.…

JS数组reduce()方法详解及高级技巧

reduce()方法可以搞定的东西,for循环,或者forEach方法有时候也可以搞定,那为啥要用reduce()?这个问题,之前我也想过,要说原因还真找不到,唯一能找到的是:通往成功的道路有很多&#…

米哈游春招算法岗-2023.03.19-第一题-交换字符-简单题

交换字符Problem Description 米小游拿到了一个仅由小写字母组成的字符串,她准备进行恰好一次操作:交换两个相邻字母,在操作结束后使得字符串的字典序尽可能大。 请你输出最终生成的字符串。 input 一个仅由小写字母组成的字符串,…

经典七大比较排序算法 ·上

经典七大比较排序算法 上1 选择排序1.1 算法思想1.2 代码实现1.3 选择排序特性2 冒泡排序2.1 算法思想2.2 代码实现2.3 冒泡排序特性3 堆排序3.1 堆排序特性:4 快速排序4.1 算法思想4.2 代码实现4.3 快速排序特性5 归并排序5.1 算法思想5.2 代码实现5.3 归并排序特性…

【目标检测 DETR】通俗理解 End-to-End Object Detection with Transformers,值得一品。

文章目录DETR1. 亮点工作1.1 E to E1.2 self-attention1.3 引入位置嵌入向量1.4 消除了候选框生成阶段2. Set Prediction2.1 N个对象2.2 Hungarian algorithm3. 实例剖析4. 代码4.1 配置文件4.1.1 数据集的类别数4.1.2 训练集和验证集的路径4.1.3 图片的大小4.1.4 训练时的批量…

iOS 紧急通知

一般通知 关于通知的各种配置和开发,可以参考推送通知教程:入门 – Kodeco,具有详细步骤。 紧急通知表现 紧急通知不受免打扰模式和静音模式约束。当紧急通知到达时,会有短暂提示音量和抖动(约2s)。未锁…