python中try-except-finally简介及用法

什么是try-except-finally?

try-except-finally是python中的一个语句,它用于处理可能发生的异常(错误),并在异常发生后执行一些必要的操作。它由三个部分组成:

  • try:尝试执行一段可能发生异常的代码
  • except:捕获并处理异常的代码
  • finally:无论是否发生异常,都会执行的代码

为什么要使用try-except-finally?

使用try-except-finally可以帮助我们:

  • 预防和处理程序运行过程中出现的不期望的情况,比如除数为零,文件不存在,索引越界等
  • 提高程序的稳定性和健壮性,避免程序因为异常而终止
  • 提高用户体验,给用户友好的错误提示,而不是显示复杂的错误信息
  • 释放程序占用的资源,比如关闭文件,断开连接等

如何使用try-except-finally?

try-except-finally的基本语法如下:

try:# 尝试执行一段可能发生异常的代码
except Exception as e:# 捕获并处理异常的代码,可以打印错误信息,记录日志,或者采取其他措施# Exception是异常的基类,可以捕获所有的异常# e是异常对象,可以获取异常的类型和信息
finally:# 无论是否发生异常,都会执行的代码,通常用于释放资源,比如关闭文件,断开连接等

我们也可以使用多个except来捕获不同类型的异常,或者使用else来执行没有发生异常时的代码,例如:

try:# 尝试执行一段可能发生异常的代码
except ZeroDivisionError as e:# 处理除数为零的异常print(f"Cannot divide by zero: {e}")
except FileNotFoundError as e:# 处理文件不存在的异常print(f"File not found: {e}")
except Exception as e:# 处理其他未知的异常print(f"Something went wrong: {e}")
else:# 如果没有发生异常,执行这段代码print("Everything is OK")
finally:# 无论是否发生异常,都会执行的代码,通常用于释放资源,比如关闭文件,断开连接等

举个例子

假设我们要从一个文件中读取数据,并计算平均值。我们可以使用try-except-finally来处理可能发生的异常,比如文件不存在,文件格式错误,除数为零等,并在最后关闭文件。代码如下:

# 定义一个变量,用于存储文件对象
f = None
try:# 打开文件f = open("data.txt", "r")# 读取所有的行lines = f.readlines()# 计算总和和个数total = 0count = 0for line in lines:# 去掉换行符line = line.strip()# 转换为数字num = float(line)# 累加total += num# 计数count += 1# 计算平均值avg = total / count# 打印结果print(f"The average is {avg:.2f}")
except FileNotFoundError as e:# 文件不存在的异常print(f"File not found: {e}")
except ValueError as e:# 文件格式错误的异常print(f"Invalid data: {e}")
except ZeroDivisionError as e:# 除数为零的异常print(f"Cannot divide by zero: {e}")
except Exception as e:# 其他未知的异常print(f"Something went wrong: {e}")
else:# 没有发生异常print("Everything is OK")
finally:# 无论是否发生异常,都要关闭文件if f is not None:f.close()

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

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

相关文章

最简k8s部署(AWS Load Balancer Controller使用)

问题 我需要在k8s集群里面部署springboot服务,通过k8s ingress访问集群内部的springboot服务,应该怎么做? 这里假设已经准备好k8s集群,而且也准备好springboot服务的运行镜像了。这里我们将精力放在k8s服务编排上面。 一图胜千言…

Github 2024-03-09 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-09统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目1Scala项目1CUE项目1InfluxDB Edge: 开源实时时序数据库 创建周期:3817 天开发语言:Rust协议类型:Apache License 2.0S…

基于Springboot的智慧社区居家养老健康管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的智慧社区居家养老健康管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)…

C语言如何选择循环语句?

一、问题 循环语句有三种,分别是 while 循环、do...while 循环和 for 循环。对于不同的程序, 应该使⽤不同的循环结构。那么,应该如何选择呢? 二、解答 1. 三种循环的⽐较 三种循环都可以⽤来处理同⼀问题。⼀般情况下&…

Humanoid-Gym 开源人形机器人端到端强化学习训练框架!星动纪元联合清华大学、上海期智研究院发布!

系列文章目录 前言 Humanoid-Gym: Reinforcement Learning for Humanoid Robot with Zero-Shot Sim2Real Transfer GitHub Repository: GitHub - roboterax/humanoid-gym: Humanoid-Gym: Reinforcement Learning for Humanoid Robot with Zero-Shot Sim2Real Transfer 一、介…

[Electron]ipcMain.on和ipcMain.handle的区别

在Electron中的通信中,我们经常会用到ipcRender.invoke和ipvRender.send 接下来简要说明下这两个方法的区别 ipcMain.on(channel, listener) 这是 Electron 的主进程(main process)监听来自渲染进程(renderer process&#xff09…

[java基础揉碎]super关键字

super关键字: 基本介绍 super代表父类的引用,用于访问父类的属性、方法、构造器 super给编程带来的便利/细节 1.调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化) 2.当子类中有和父类中的成员(属性和方法)重…

【代码】JetpackComposeKotlin分享Bitmap图片

目录 1. 发送函数2. 配置fileProvider3. bitmap保存本地的函数4. 全局变量5. 封装的ButtonIcon函数 Android12在jetpack compose中使用Kotlin代码分享Bitmap图片。 1. 发送函数 Composable fun Share() {val context LocalContext.currentButtonIcon(icon Icons.Rounded.Sha…

软考高级:信息系统生命周期概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

SpringCloudGateway网关限流

文章目录 令牌桶算法原理Gateway中限流实现 网关除了请求路由、身份验证,还有一个非常重要的作用:请求限流。当系统面对高并发请求时,为了减少对业务处理服务的压力,需要在网关中对请求限流,按照一定的速率放行请求。 …

Android Studio如何修改JDK版本和获知使用的Java版本

什么是JDK和Java版本? 首先,让我们简单了解一下什么是JDK和Java版本。JDK(Java Development Kit)是Java开发工具包的缩写,它包含了Java的运行环境(JRE)和开发工具,用于开发Java应用…

【数据结构】单链表的层层实现!! !

关注小庄 顿顿解馋(●’◡’●) 上篇回顾 我们上篇学习了本质为数组的数据结构—顺序表,顺序表支持下标随机访问而且高速缓存命中率高,然而可能造成空间的浪费,同时增加数据时多次移动会造成效率低下,那有什么解决之法呢&#xff…

VS Code引入ECharts

Charts是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,提供了丰富的图表类型和交互能力。(摘自菜鸟教程) 下面我们来介绍一下VS Code引入ECharts的相关操作 检查电脑是否已经安装了Java语言的软件开发工具包 ECharts…

设计模式-行为型设计模式-命令模式

命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。[DP] // 命令接口 interface Command {void execute(); }// 具体命…

备考银行科技岗刷题笔记(持续更新版)

银行考试计算机部分复习 IEEE 802.11的帧格式 1.1 IEEE 802.11是什么? 802.11是国际电工电子工程学会(IEEE)为无线局域网络制定的标准。目前在802.11的基础上开发出了802.11a、802.11b、802.11g、802.11n、802.11ac。并且为了保证802.11更…

java SSM售后服务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

源码特点 java SSM售后服务管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采用B/…

java Lambda表达式如何实现函数递归

java Lambda表达式如何实现函数递归 Lambda表达式本身并不直接支持递归,因为Lambda表达式是匿名的,并且没有名字可以引用自身来实现递归。但是,你可以通过其他方式在Java中使用Lambda表达式来实现递归。 一种常见的做法是使用一个函数式接口…

Scrapy与分布式开发(2.3):lxml+xpath基本指令和提取方法详解

lxmlxpath基本指令和提取方法详解 一、XPath简介 XPath,全称为XML Path Language,是一种在XML文档中查找信息的语言。它允许用户通过简单的路径表达式在XML文档中进行导航。XPath不仅适用于XML,还常用于处理HTML文档。 二、基本指令和提取…

Linux下阻塞IO驱动实验实例一

一. 简介 前面几篇文章学习了 Linux内核提供的 阻塞与非阻塞IO相关的知识。 应用程序以阻塞方式访问设备时,Linux内核提供了等待队列来处理。当应用程序以非阻塞方式访问设备时,Linux内核提供了 poll轮训机制来处理。 前面一篇文章学习了Linux内核提供的非阻塞式访问设备…

Java面试题:Java多线程与并发面试题解析及知识梳理,Java中的线程池(ThreadPool)以及其重要性

随着互联网技术的不断发展,Java作为后端开发的主流语言之一,其并发编程和多线程机制得到了越来越多的关注。面试中,关于Java内存模型、多线程以及并发相关的知识点往往是面试官关注的重点。本文将为大家解析三道综合面试题,涵盖Ja…