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

Python学习笔记16:进阶篇(五)异常处理

异常

在编程中,异常是指程序运行过程中发生的意外事件,这些事件通常中断了正常的指令流程。它们可能是由于错误的输入数据、资源不足、非法操作或其他未预料到的情况引起的。Python中,当遇到这类情况时,会抛出一个异常对象,如果这个异常没有被捕获处理,程序将会终止执行。

异常处理

异常处理是一种编程技术,用于捕捉程序运行过程中发生的异常,并采取适当措施来响应这些异常,而不是让程序直接崩溃。这包括捕获异常、分析异常类型以及根据异常类型决定如何恢复或优雅地结束程序。

Python提供了try、except、else和finally语句来实现异常处理机制:

  1. try: 尝试执行的代码块,可能抛出异常的地方。
  2. except: 捕获并处理特定类型的异常。可以有多个except子句来捕获不同类型的异常。
  3. else: 如果没有异常发生,则执行这里的代码块。
  4. finally: 不管是否发生异常,都会执行的代码块,通常用来清理资源。

处理示例

针对常见的一些异常做处理示例。

处理处 ZeroDivisionError 异常

在学习四则运算的时候,我们都知道除法运行中除数不能为0。
Python中同样也有四则运算,我们练习的时候自然会避免出现除数为0的情况。在实际编程过程中,我们很少会除以一个固定数值,大多数时候都是除以一个变量,而这个变量的值,往往是在程序运行中根据各种情况计算出来的,这个时候,我们就没办法保证除数不能为0了。那么真的遇到除数为0的情况,Python会如何应对呢?

在这里插入图片描述
程序执行出现错误,提示 ZeroDivisionError :division by zero。这个是很明显的提示,并且明确指出在模块第1行。
为了防止程序错误中止,我们可以通过异常处理是程序继续执行。

try:result = 10 / 0  # 这里会尝试执行除法运算
except ZeroDivisionError:# 捕获到ZeroDivisionError后,输出提示信息print("错误:不能除以零")
print("程序继续执行")

在这里插入图片描述

程序打印了错误的提示,然后正确的向下执行。

这就是异常处理的基础语法和使用,但是有时候程序出现异常不出现异常是两种处理方法,这个时候我们就需要用到else语句了。

div = 2
div *= 2
div += 3
div //= 3
div -= 1
try:result = 10 / div  # 这里会尝试执行除法运算
except ZeroDivisionError:# 捕获到ZeroDivisionError后,输出提示信息print("错误:不能除以零")
else:print("结果是:", result)
print("程序继续执行")

在这里插入图片描述
根据结果,我们发现程序走了else的分支,那么很明显,异常没有发生,输出结果也符合预期。

最后讲一下比较特殊的finally。这个语句下的分支,是不管异常发生不发生,都能够执行的语句。通常会用来关闭某些资源,比如上篇说的文件的资源,就会在finally代码块中调用close()方法关闭文件资源。

finally语句使用新的异常进行示例。

FileNotFoundError

在进行文件处理的时候,可能不小心填错了地址或者写错了文件格式。这个时候调用文件流的open方法就会出现异常。

file = open("example.txt")
content = file.read()
print(content)

在这里插入图片描述
一个很明显的文件不存在的提示。我们同样使用try…except进行异常处理

try:file = open("example.txt")content = file.read()
except FileNotFoundError:print("文件未找到")
else:print(content)

在这里插入图片描述
根据我们学习的文件流知识吗,我们在文件操作过程中,使用了open函数就一定要调用close函数关闭资源。那么流关闭的调用应该放在哪里呢?仔细想想,放在正常流程中,程序出现错误怎么办?放在异常处理中,那正常逻辑不是得也写一份?那么finally无疑是最好的选择了。
写在finally中有两个好处:

确保资源总是被释放:无论try块中的代码是否抛出异常,finally块都会执行。这意味着即使程序因为某些未预料到的错误提前退出,finally中的清理代码也会运行,从而确保打开的资源被正确关闭,防止资源泄露。
逻辑清晰:将资源清理工作放在finally块中,可以使得异常处理逻辑(except块)专注于处理异常本身,而资源管理则由finally统一负责,这样代码结构更加清晰,便于理解和维护。

file = open("example.txt")
try:content = file.read()print(content)
except FileNotFoundError:print("文件未找到")
finally:file.close()  # 确保文件被关闭

这样的话,资源最终都会关闭。

多个异常

实际编写代码时,代码通常会几行几十行,那么出现异常的种类也可能不止一种,那么怎么去处理多种异常呢?

try:num = int(input("请输入一个数字: "))result = 10 / num
except ValueError:print("输入的不是有效的数字")
except ZeroDivisionError:print("不能除以零")

像这样,按顺序使用except语句处理即可。

那么问题又来了,两个三个,甚至四个五个我都一行行去写没问题,十几个怎么办?异常处理比代码还长,谁看谁头痛。

python有处理所有异常的办法。

try:# 可能抛出任何类型的异常的代码...
except Exception as e:print(f"发生了异常: {e}")

使用Exception,这表示所有的异常都会被捕获住。

问题又又来了,我就想单独处理FileNotFoundError,其他异常再统一处理,行不行?

当然可以! 请看。

try:# 可能抛出多种类型的异常的代码file = open("nonexistent_file.txt")  # 示例:尝试打开一个不存在的文件content = file.read()print(content)
except FileNotFoundError:print("错误:指定的文件未找到。")
except Exception as e:print(f"发生了其他异常: {e}")  # 捕获除FileNotFoundError之外的所有异常
finally:# 关闭文件等清理操作,如果文件已成功打开的话if 'file' in locals() and not file.closed:file.close()

在python中,except语句存在多个同时使用时,按从上到下的顺序执行。按上面代码来解释就是:python发现你程序执行的时候出现异常,先检查是不是FileNotFoundError,是就在这个except中进行处理,不是的话再往下执行匹配下一个异常类。这样的话别说处理一个,处理十个都没问题。

结尾

python的异常处理就这些内容了,大家在实际使用的时候要灵活运用,根据不同的业务和场景灵活使用try…except…else…finally,来得到自己想要的结果。

作业

  1. 查询常见的一些异常。

  2. 自己编写代码处理这些异常,从单个,到多个,再到单个+所有的模式。

相关文章:

Python学习笔记16:进阶篇(五)异常处理

异常 在编程中,异常是指程序运行过程中发生的意外事件,这些事件通常中断了正常的指令流程。它们可能是由于错误的输入数据、资源不足、非法操作或其他未预料到的情况引起的。Python中,当遇到这类情况时,会抛出一个异常对象&#…...

Mac 安装依赖后依旧报错 ModuleNotFoundError: No module named ‘Crypto‘

ModuleNotFoundError: No module named ‘Crypto’ 解决办法 pip uninstall pycryptodome pip uninstall pycrypto pip uninstall crypto pip install pycrypto...

【07】持久化-数据库选择和设计

1. 数据库选择 在比特币原始论文中,并没有提到要使用哪一个具体的数据库,它完全取决于开发者如何选择。Bitcoin Core ,最初由中本聪发布,现在是比特币的一个参考实现,它使用的是 LevelDB。 我们将要使用的是BoltDB。Bolt DB是一个纯键值存储的 Go 数据库。没有具体的数据…...

压力测试

1.什么是压力测试 压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数 使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误&#…...

C语言| 数组元素的删除

同数组元素的插入差不多。 数组元素的插入,是先移动要插入元素位置后面的所有元素,再插入新元素,长度1。 C语言| 数组的插入-CSDN博客 数组元素的删除,是先删除元素,再把后面的元素往前移动一位,而本程序…...

QListView、QTableView或QTreeView截取滚动区域(截长图)

本文以QTreeView为例,理论上继承自QAbstractScrollArea的类都支持本文所述的方法。 一.效果 一共5个文件夹,每个文件文件夹下有5个文件,先把文件夹展开,然后截图。将滚动条拖到居中位置,是为了证明截图对滚动条无影响 下面是截的图 二.原理 将滚动区域的viewport设置为…...

论文《Tree Decomposed Graph Neural Network》笔记

【TDGNN】本文提出了一种树分解方法来解决不同层邻域之间的特征平滑问题,增加了网络层配置的灵活性。通过图扩散过程表征了多跳依赖性(multi-hop dependency),构建了TDGNN模型,该模型可以灵活地结合大感受场的信息&…...

控制下属很简单,用好这3大管人绝招,再跳的刺头也不敢造次

控制下属很简单,用好这3大管人绝招,再跳的刺头也不敢造次 第一招:给压力 很多团队中的员工都是自己不带脑子工作,遇事就喜欢请示领导,让领导拿方案、拿决策。 还有一些人,推一下,他才动一下&a…...

2.APP测试-安卓adb抓取日志

1.打开手机的开发者模式,打开USB调试 (1)小米手机打开开发者模式: 【设置】-【我的设备】-【全部参数信息】-快速多次点击【OS版本】-进入开发者模式 (2)连接手机和电脑,手机打开USB调试 【设置…...

高考填报志愿选专业,要善于发掘自身优势

每年的高考季,如何填报志愿又再成为困扰家长以及学生的难题,可能在面对大量的专业时,无论是考生还是家长都不知道应该如何选择,好的专业孩子不一定有优势,感兴趣的冷门专业又担心日后找工作难。 实际上,专业…...

如何在 Ubuntu 14.04 上使用 HAProxy 实现 SSL 终止

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 HAProxy,全称高可用代理,是一款流行的开源软件 TCP/HTTP 负载均衡器和代理解决方案,可在 Linu…...

dockercompose

安装dockerconpose #上传docker-compose安装包 chmod x docker-compose mv docker-compose /usr/bin/ [rootlocalhost ~]# docker-compose --version docker-compose version 1.24.1, build 4667896b文件格式以及编写注意事项 YAML 是一种标记语言,它可以很直观的…...

「51媒体」活动会议,展览展会,直播曝光的一种方法

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 我们在做活动会议,或者参加展览展会,需要进行直播的时候,可以通过一键同步多个媒体平台的方法,来扩大曝光,比如一场直播我们可…...

Go WebSocket入门+千万级别弹幕系统架构设计

Go实现WebSocket(千万级别弹幕系统架构设计) 1 websocket简介(基于HTTP协议的长连接) 使用WebSocket可以轻松的维持服务器端长连接,其次WebSocket是架构在HTTP协议之上的,并且也可以使用HTTPS方式,因此WebSocket是可靠…...

uniapp使用伪元素实现气泡

uniapp使用伪元素实现气泡 背景实现思路代码实现尾巴 背景 气泡效果在开发中使用是非常常见的,使用场景有提示框,对话框等等,今天我们使用css来实现气泡效果。老规矩,先看下效果图: 实现思路 其实实现这个气泡框的…...

字节跳动:从梦想之芽到参天大树

字节跳动掌舵人:张一鸣 2012年:梦想的起点:在一个阳光明媚的早晨,北京的一座普通公寓里,一位名叫张一鸣的年轻人坐在电脑前,眼中闪烁着坚定的光芒。他的心中有一个梦想——通过技术改变世界,让…...

组合数学、圆排列、离散数学多重集合笔记

自用 如果能帮到您,那也值得高兴 知识点 离散数学经典题目 多重集合组合 补充容斥原理公式 隔板法题目 全排列题目:...

网络技术原理需要解决的5个问题

解决世界上任意两台设备时如何通讯的?? 第一个问题,pc1和pc3是怎么通讯的? 这俩属于同一个网段,那么同网段的是怎么通讯的? pc1和pc2属于不同的网段,第二个问题,不同网段的设备是…...

【数据结构】链表的大概认识及单链表的实现

目录 一、链表的概念及结构 二、链表的分类 三、单链表的实现 建立链表的节点: 尾插——尾删: 头插——头删: 查找: 指定位置之后删除——插入: 指定位置之前插入——删除指定位置: 销毁链表&am…...

国企:2024年6月中国移动相关招聘信息 二

在线营销服务中心-中国移动通信有限公司在线营销服务中心 硬件工程师 工作地点:河南省-郑州市 发布时间 :2024-06-18 截至时间: 2024-06-30 学历要求:本科及以上 招聘人数:1人 工作经验:3年 岗位描述 1.负责公司拾音器等音视频智能硬件产品全过程管理,包括但…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言:多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

什么是EULA和DPA

文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...