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. 自己编写代码处理这些异常,从单个,到多个,再到单个+所有的模式。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最详细的Selenium+Pytest自动化测试框架实战

前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象,封装继承 一定的selenium基础——本篇不讲selenium, 测试框架简介 测试框架有什么优点呢: 代码复用率高,如果不使用框架的话&#xff…

一个虚拟空间可以放多个不同类型的网站吗

通常一些个人站长或者公司可能同时拥有几个网站,由于其他几个网站流量不高,而每个网站都租用一个虚拟主机空间的话,感觉有点浪费。大家可能会想虚拟主机能不能也像独立服务器那样放置多个网站呢?答案是肯定的,确定主机…

2004年-2022年 全国31省市场分割指数数据

市场分割指数在经济学领域是一个关键的概念,特别是在评估不同区域市场一体化水平时。陆铭等学者深入研究了市场分割问题,并对市场分割指数给出了定义:它是一个衡量在相同时间点不同区域或同一区域在不同时间点的某类商品相对价格差异的指标。…

组合优于继承

设计模式中的组合与继承 使用组合的模式 装饰者模式(decorator pattern) 策略模式(strategy pattern) 组合模式(composite pattern) 使用了组合关系 使用继承的模式 模板模式(template p…

【OpenGauss源码学习 —— (ALTER TABLE(列存修改列类型))】

ALTER TABLE(列存修改列类型) ATExecAlterColumnType 函数1. 检查和处理列存储表的字符集:2. 处理自动递增列的数据类型检查:3. 处理生成列的类型转换检查:4. 处理生成列的数据类型转换: build_column_defa…

复杂风控场景(反洗钱)下,一些sql解决方案

前言: 在工作中遇到的一些比较复杂的场景,一直觉得很有记录的价值,但是就是嫌麻烦懒得写,拖延症比较厉害,主要是怕以后忘了,这些问题如果做面试题的话,也很考验人,算是给自己留个备忘…

几种常见的滤波器样式

IIR Peaking Filter IIR LowShelf Filter IIR HighShelf Filter 4. IIR LowPassFilter 5. IIR HighPass Filter FIR PeakingFilter FIR LowShelf Filter 8. FIR HighShelf Filter 8. FIR LowPass Filter 10. FIR HighPass Filter

命令行中,常见mysql命令

打开终端。 连接到 MySQL 服务器(假设你的mysql叫root): mysql -u root -p 输入密码: Enter password: ******** 查看所有数据库: mysql> SHOW DATABASES; ERROR 4031 (HY000): The client was disconnected …

操作系统入门 -- 进程的通信方式

操作系统入门 – 进程的通信方式 1.什么是进程通信 1.1 定义 进程通信就是在不同进程之间交换信息。在之前文章中可以了解到,进程之间相互独立,一般不可能互相访问。因此进程之间若需要通信,则需要一个所有进程都认可的共享空间&#xff0…

OpenHarmony-HDF驱动框架介绍及加载过程分析

前言 HarmonyOS面向万物互联时代,而万物互联涉及到了大量的硬件设备,这些硬件的离散度很高,它们的性能差异与配置差异都很大,所以这要求使用一个更灵活、功能更强大、能耗更低的驱动框架。OpenHarmony系统HDF驱动框架采用C语言面…

【Kafka】Kafka Broker工作流程、节点服役与退役、副本、文件存储、高效读写数据-08

【Kafka】Kafka Broker工作流程、节点服役与退役、副本、文件存储、高效读写数据 1. Kafka Broker 工作流程1.1 Zookeeper 存储的 Kafka 信息1.2 Kafka Broker总体工作流程1.2.1 Controller介绍 1.3 Broker 重要参数 2. 节点服役与退役3. Kafka副本 1. Kafka Broker 工作流程 …

GUI Guider(V1.7.2) 设计UI在嵌入式系统上的应用(N32G45XVL-STB)

目录 概述 1 使用GUI Guider 设计UI 1.1 创建页面 1.2 页面切换事件实现 1.3 生成代码和仿真 1.3.1 生成和编译代码 1.3.2 仿真UI 2 GUI Guider生成的代码结构 2.1 代码结构介绍 2.2 Project目录下的文件 3 板卡上移植UI 3.1 加载代码至工程目录 3.2 主函数中调…

【环境变量问题:计算机删除环境变量的恢复方法;此环境变量太大。此对话框允许将值设置为最长2047个字符】

不小心误删了win10系统环境变量可以试试下文方法恢复。 本方法针对修改环境变量未重启的用户可以使用,如果修改环境变量,然后还重启了,只能说重新来。 方法一:使用命令提示符恢复 被修改的系统Path只是同步到了注册表中&#x…

2024软考系规考前复习20问!看看你能答上来多少

今天给大家整理了——2024系统规划与管理师考前20问,这是一份很重要的软考备考必看干货,包含很多核心知识点。有PDF版,可打印下来,过完一遍教材后,来刷一刷、背一背,说不定可以帮你拿下不少分。 第1问- 信息…

python-录音文件转换成文字

大多数语音转文字工具都是要收费的,免费的很少,而且质量也不太高,python有自己的语音识别库,因此尝试使用一下。 先安装库: pip install pydub speechrecognition pip install pydub 安装 ffmpeg brew install ff…

2024.6.23周报

目录 摘要 ABSTRACT 一、文献阅读 一、题目 二、摘要 三、网络架构 四、创新点 五、文章解读 1、Introduction 2、Method 3、实验 4、结论 二、代码实验 总结 摘要 本周阅读了一篇题目为NAS-PINN: NEURAL ARCHITECTURE SEARCH-GUIDED PHYSICS-INFORMED NEURAL N…

解决电脑关机难题:电脑关不了机的原因以及方法

在使用电脑的日常生活中,有时会遇到一些烦人的问题,其中之一就是电脑关不了机。当您尝试关闭电脑时,它可能会停留在某个界面,或者根本不响应关机指令。这种情况不仅令人困惑,还可能导致数据丢失或系统损坏。 在本文中…

DS:堆的应用——两种算法和TOP-K问题

欢迎来到Harper.Lee的学习世界!博主主页传送门:Harper.Lee的博客主页想要一起进步的uu可以来后台找我哦! 一、堆的排序 1.1 向上调整——建小堆 1.1.1 代码实现 //时间复杂度:O(N*logN) //空间复杂度:O(logN) for (…

计算机网络知识点汇总

计算机网络知识点汇总 第1章计算机网络体系结构 1.1 计算机网络概述 1.1.1 计算机网络的概念 ​ 计算机网络是由若干个结点(node)和连接这些结点的链路(link)组成。网络中的结点可以是就三级、集线器、交换机、或者路由器等,网络之间通过路由器进行互联&#xf…

Nodejs 第七十九章(Kafka进阶)

kafka前置知识在上一章讲过了 不再复述 kafka进阶 1. server.properties配置文件 server.properties是Kafka服务器的配置文件,它用于配置Kafka服务的各个方面,包括网络设置、日志存储、消息保留策略、安全认证 #broker的全局唯一编号,不能…