关于Python中的异常处理以及示例

Python中,异常处理是一种非常重要的编程结构,它允许程序优雅地处理运行时错误,避免程序因为未处理的异常而崩溃。try-except-else-finally语句块是Python中用于异常处理的主要机制。

try-except-else-finally 的工作原理

  • try :尝试执行的代码块。如果在执行过程中发生了异常,则立即停止执行,并查找相匹配的except块来处理该异常。
  • except :一个或多个except块可以跟在try块后面,用于捕获并处理异常。如果try块中抛出了异常,并且except块与这个异常匹配(即except后面指定的异常类型是该异常或其父类),则执行该except块中的代码。
  • else (可选):else块是可选的,它紧随所有的except块之后。如果没有异常发生,else块中的代码将被执行。
  • finally (可选):finally块也是可选的,它无论是否发生异常都会被执行。这通常用于执行清理操作,如关闭文件或释放资源。

示例

下面是一个使用try-except-else-finally语句块处理异常的示例:

python复制代码

try:

# 尝试执行的代码

num = int(input("请输入一个整数:"))

result = 10 / num

print(f"10 除以 {num} 的结果是 {result}")

except ValueError:

# 处理 ValueError 异常

print("输入错误,请输入一个有效的整数。")

except ZeroDivisionError:

# 处理 ZeroDivisionError 异常

print("错误:除数不能为0。")

else:

# 如果没有异常发生,则执行

print("计算成功完成。")

finally:

# 无论是否发生异常,都会执行

print("程序执行完毕。")

在这个示例中,程序首先尝试将用户输入转换为整数,并计算10除以该整数的结果。如果用户输入的不是一个整数(导致ValueError异常),或者输入的是0(导致ZeroDivisionError异常),则相应的except块将被执行。如果代码成功执行没有抛出异常,则else块将被执行。无论是否发生异常,finally块都将被执行,用于输出一条消息表示程序执行完毕。

下面我将详细介绍Python异常处理的一些重要方面:

1. 异常类

Python中,几乎所有的异常都是从内置的BaseException类派生的。ExceptionBaseException的直接子类,大多数由用户定义的异常都应该从这个类派生。还有一些其他的内置异常类,如ValueErrorTypeErrorIndexError等,用于表示不同类型的错误情况。

2. 多个except

你可以为try块指定多个except块来捕获不同类型的异常。Python会按顺序检查except块,直到找到一个与发生的异常相匹配的块。

python复制代码

try:

# ... 尝试执行的代码 ...

except ValueError:

# 处理 ValueError 异常

print("值错误")

except TypeError:

# 处理 TypeError 异常

print("类型错误")

except Exception as e:

# 处理其他所有类型的异常

print(f"发生了未知异常:{e}")

3. 捕获所有异常

如果你想要捕获所有类型的异常(这通常不是最佳实践,因为它可能会隐藏一些你不希望忽略的错误),你可以使用不带任何异常的except块,或者使用Exception类。

python复制代码

try:

# ... 尝试执行的代码 ...

except Exception as e:

# 处理所有类型的异常

print(f"捕获到异常:{e}")

4. 异常链

Python 3中,当在一个except块中引发一个新的异常时,原始异常的上下文会被保留。这被称为异常链,它允许你追踪异常的来源。

python复制代码

try:

# ... 尝试执行的代码 ...

except SomeError as e:

# 处理异常,并可能引发一个新的异常

raise NewError("新的错误信息") from e

5. else

else块是可选的,并且只有当try块中的代码没有引发异常时才会执行。这可以用于执行那些只有在没有异常时才应该运行的代码。

6. finally

finally块也是可选的,但它无论是否发生异常都会执行。它通常用于执行清理操作,如关闭文件、释放资源等。

7. 自定义异常

你可以通过继承内置的Exception类或其子类来创建自定义异常。这允许你定义特定于你的应用程序的错误类型。

python复制代码

class MyCustomError(Exception):

def __init__(self, message="这是一个自定义错误"):

self.message = message

super().__init__(self.message)

try:

# ... 尝试执行的代码 ...

raise MyCustomError("出错了!")

except MyCustomError as e:

print(e)

8. 使用with语句进行资源管理

虽然with语句不是直接用于异常处理的,但它与异常处理紧密相关,因为它允许你自动管理资源(如文件、网络连接等),并确保即使在发生异常时也能正确地关闭或释放这些资源。

python复制代码

with open("myfile.txt", "r") as file:

# 对文件进行操作

# ...

# 文件将在这里自动关闭,即使在读取文件时发生异常也是如此

9. 记录和忽略异常

有时,你可能想要记录异常的信息,但又不希望程序因为异常而停止。在这种情况下,你可以在except块中简单地记录异常信息,然后继续执行。

python复制代码

try:

# ... 尝试执行的代码 ...

except SomeError:

# 记录异常信息

logging.error("发生了SomeError异常")

# 可以选择继续执行其他操作

通过掌握这些异常处理的概念和技巧,你可以编写更加健壮、易于维护的Python代码。

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

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

相关文章

vue3 【提效】使用 CSS 框架 UnoCSS 实用教程

该换种更高效的方式写 CSS 啦&#xff0c;举个例&#xff1a; <div class"flex"> </div>相当于 <div class"flex"> </div> <style> .flex {display: flex; } </style>当然&#xff0c;还有超多强大的功能帮我们提升…

【后端面试题】【中间件】【NoSQL】MongoDB查询过程、ESR规则、覆盖索引的优化

任何中间件的面试说到底都是以高可用、高性能和高并发为主&#xff0c;而高性能和高并发基本是同时存在的。 性能优化一直被看作一个高级面试点&#xff0c;因为只有对原理了解得很透彻的人&#xff0c;在实践中才能找准性能优化的关键点&#xff0c;从而通过各种优化手段解决性…

为什么人员定位系统很有必要性?

人员定位系统在现代社会和企业环境中具有极高的必要性&#xff0c;这主要体现在以下几个方面&#xff1a; 一、安全保障 二、提升效率 三、管理优化 四、增强合规性 综上所述&#xff0c;人员定位系统通过提供实时、准确的位置信息&#xff0c;为企业带来了安全保障、效率提升…

香橙派AIpro实测:YOLOv8便捷检测,算法速度与运行速度结合

香橙派AIpro实测&#xff1a;YOLOv8便捷检测&#xff0c;算法速度与运行速度结合 文章目录 香橙派AIpro实测&#xff1a;YOLOv8便捷检测&#xff0c;算法速度与运行速度结合一、引言二、香橙派AIpro简介三、YOLOv8检测效果3.1 目标检测算法介绍3.1.1 YOLO家族3.1.2 YOLOv8算法理…

500mA、低压差、低噪声、超快、无需旁路电容的CMOS LDO稳压器RT9013

一般描述 RT9013 SOT23-5封装的外观和丝印 RT9013 是一款高性能的 500mA LDO 稳压器&#xff0c;具有极高的 PSRR 和超低压差。非常适合具有苛刻性能和空间要求的便携式射频和无线应用。 RT9013的静态电流低至25μA&#xff0c;进一步延长了电池的使用寿命。RT9013 也适用于低…

Element中的日期时间选择器DateTimePicker和级联选择器Cascader

简述&#xff1a;在Element UI框架中&#xff0c;Cascader&#xff08;级联选择器&#xff09;和DateTimePicker&#xff08;日期时间选择器&#xff09;是两个非常实用且常用的组件&#xff0c;它们分别用于日期选择和多层级选择&#xff0c;提供了丰富的交互体验和便捷的数据…

私域和社群的差别是什么?

社群就是拉很多人建群就可以了&#xff0c;但是私域不是&#xff0c;这里有三点不同 1、私域的用户来源&#xff0c;不仅仅是微信&#xff0c;而是基于一定的联系形成的链接&#xff0c;比如买了商家的货&#xff0c;反复购买觉得好&#xff0c;推荐给亲朋好友的二次开发用户&…

nanodiffusion代码逐行理解之Attention

目录 一、注意力中的QKV二、注意力中的位置嵌入三、注意力中的多头四、注意力和自注意力五、注意力中的encode和decoder 一、注意力中的QKV 简单来说&#xff1a; Q: 要查询的信息 K: 一个索引&#xff0c;要查询的向量 V: 我们查询得到的值 复杂一点的解释&#xff1a; Query…

如何快速选择短剧系统源码:高效构建您的在线短剧平台

在数字化时代&#xff0c;短剧作为一种新兴的娱乐形式&#xff0c;受到了广泛的欢迎。随着市场需求的增长&#xff0c;构建一个在线短剧平台成为了很多创业者和开发者的目标。而选择正确的短剧系统源码则是实现这一目标的关键步骤。本文将为您提供一些实用的指导&#xff0c;帮…

论文解析——Transformer 模型压缩算法研究及硬件加速器实现

作者及发刊详情 邓晗珂&#xff0c;华南理工大学 摘要 正文 实验平台 选取模型&#xff1a; T r a n s f o r m e r b a s e Transformer_{base} Transformerbase​ 训练数据集&#xff1a;WMT-2014 英语-德语翻译数据集、IWSLT-2014 英语-德语互译数据集 Transformer模…

策略模式入门:基本概念与应用

目录 策略模式策略模式结构策略模式应用场景策略模式优缺点练手题目题目描述输入描述输出描述题解 策略模式 策略模式&#xff0c;又称政策模式&#xff0c;是一种行为型设计模式&#xff0c;它能让你定义一系列算法&#xff0c;并将每种算法分别放入独立的类中&#xff0c;以…

基于Spring Boot的高校智慧采购系统

1 项目介绍 1.1 摘要 随着信息技术与网络技术的迅猛发展&#xff0c;人类社会已跨入全新信息化纪元。传统的管理手段因其内在局限&#xff0c;在处理海量信息资源时日渐捉襟见肘&#xff0c;难以匹配不断提升的信息管理效率和便捷化需求。顺应时代发展趋势&#xff0c;各类先…

http数据传输确保完整性和保密性整流程方案(含源码)

往期文章回顾 【深度学习】 【深度学习】物体检测/分割/追踪/姿态估计/图像分类检测演示系统【含源码】【深度学习】YOLOV8数据标注及模型训练方法整体流程介绍及演示【深度学习】行人跌倒行为检测软件系统【深度学习】火灾检测软件系统【深度学习】吸烟行为检测软件系统【深度…

rtpengine_mr12.0 基础建设容器运行

目录 Dockerfile rtpengine.conf 容器内编译安装 RTPEngine 正常提供功能 1. 启动RTPEngine服务 2. 删除 RTPEngine服务 3. 加载内核模块 检查所有进程是否正在运行 上传到仓库 博主wx&#xff1a;yuanlai45_csdn 博主qq&#xff1a;2777137742 后期会创建粉丝群&…

实验二 图像的代数运算

一、实验目的&#xff1a; 1&#xff0e;了解图像的算术运算在数字图像处理中的初步应用。 2&#xff0e;体会图像算术运算处理的过程和处理前后图像的变化。 二、实验内容&#xff1a; 1&#xff0e;图像的加法运算 图像相加一般用于对同一场景的多幅图像求平均效果&…

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda

目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…

如何在TikTok上获得更多观看量:12个流量秘诀

TikTok作为热门海外社媒&#xff0c;在跨境出海行业中成为新兴的推广渠道&#xff0c;但你知道如何让你的TikTok赢得更多关注次数吗&#xff1f;如果您正在寻找增加 TikTok 观看次数的方法&#xff0c;接下来这12种策略&#xff0c;你需要一一做好&#xff01; 1. 在内容中添加…

女性经济崛起,天润融通用客户感知挖掘市场潜力

每逢一年一度的国际妇女节&#xff0c;“女性”话题都会被郑重地讨论。 从消费市场上来说&#xff0c;最近几年女性群体正在拥有越来越大的影响力&#xff0c;甚至出现了“她经济”这样的专属词汇在最近几年被市场反复讨论。 毫无疑问&#xff0c;女性消费群体的崛起已经成为…

2.8亿东亚五国建筑数据分享

数据是GIS的血液&#xff01; 我们现在为你分享东亚5国的2.8亿条建筑轮廓数据&#xff0c;该数据包括中国、日本、朝鲜、韩国和蒙古5个东亚国家完整、高质量的建筑物轮廓数据&#xff0c;你可以在文末查看领取方法。 数据介绍 虽然开源的全球的建筑数据已经有微软的建筑数据…

【android】【adb shell】写一个shell脚本,监听进程pid变化

前言 当前业务&#xff0c;需要写一个脚本&#xff0c;不断监视com.android.phone 进程是否异常死掉 脚本 #!/system/bin/sh last_pid"" current_pid"" while(true){current_pidps -A | grep com.android.phone | awk {print $2}if [ -n "$current…