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

Python 中如何处理异常?

在Python中,异常处理是一种重要的编程技术,它允许开发者优雅地处理程序运行过程中出现的错误或异常情况,而不是让程序直接崩溃。

通过异常处理,我们可以使程序更加健壮、用户友好。

异常处理的基本结构

Python中最基本的异常处理结构是try-except语句。这个结构的基本形式如下:

try:# 尝试执行的代码块result = 10 / 0  # 这里会产生一个除以零的错误
except ZeroDivisionError:# 如果try块中的代码产生了ZeroDivisionError,则执行这里的代码print("不能除以零!")

在这个例子中,当尝试执行10 / 0时,会抛出一个ZeroDivisionError异常。

由于我们已经预见了这种可能发生的错误,并使用了except子句来捕获它,因此程序不会因为未处理的异常而终止,而是继续执行except块中的代码。

处理多种异常

如果一段代码可能会产生多种类型的异常,可以使用多个except子句来分别处理这些异常:

try:# 尝试打开不存在的文件with open('nonexistent_file.txt', 'r') as file:content = file.read()
except FileNotFoundError:print("文件不存在,请检查文件路径是否正确。")
except IOError:print("发生输入输出错误。")

这里,FileNotFoundErrorIOError分别处理了文件不存在和读取文件时可能出现的错误。

使用else子句

有时候,我们希望在没有异常发生的情况下执行某些代码。这可以通过添加else子句来实现:

try:num1 = int(input("请输入第一个数字: "))num2 = int(input("请输入第二个数字: "))
except ValueError:print("输入无效,请确保输入的是整数。")
else:# 只有当try块中没有发生异常时,才会执行else块print(f"两数之和为: {num1 + num2}")

在这个例子中,如果用户输入的不是整数,ValueError会被触发,相应的异常处理代码将被执行。

如果没有异常发生,那么else块中的代码将被执行,计算并显示两个数字的和。

使用finally子句

无论是否发生异常,finally子句中的代码都会被执行。这对于确保资源(如文件或网络连接)被正确关闭非常有用:

try:file = open('example.txt', 'r')data = file.read()
except IOError:print("无法读取文件。")
finally:file.close()  # 确保文件总是被关闭
抛出异常

除了处理异常外,有时我们也需要主动抛出异常。这通常用于强制函数调用者处理某种特定的情况:

def divide(x, y):if y == 0:raise ValueError("除数不能为零。")  # 主动抛出异常return x / ytry:result = divide(10, 0)
except ValueError as e:print(e)  # 输出错误信息

在这个例子中,如果尝试将任何数字除以零,函数divide会抛出一个ValueError异常。

调用者需要通过try-except结构来处理这个异常。

日常开发中的注意事项
  1. 避免捕捉所有异常:使用except:来捕捉所有异常是一种不推荐的做法,因为它会使调试变得困难,并可能导致隐藏其他错误。应当尽可能具体地指定要捕获的异常类型。

  2. 保持异常处理代码的简洁性:异常处理代码应尽量简短,只处理与异常相关的问题。复杂的逻辑应该放在try块之外。

  3. 使用异常来控制流程:虽然异常主要用来处理错误情况,但它们也可以用来控制程序流程,特别是在解析复杂数据结构或处理外部API响应时。

  4. 记录异常信息:在生产环境中,应该记录异常及其上下文信息,以便于后续的调试和分析。可以使用Python的日志模块来完成这一任务。

  5. 考虑性能影响:频繁地抛出和捕获异常可能会对程序性能产生负面影响,尤其是在循环等高频率操作中。应当尽量减少不必要的异常抛出。

相关文章:

Python 中如何处理异常?

在Python中,异常处理是一种重要的编程技术,它允许开发者优雅地处理程序运行过程中出现的错误或异常情况,而不是让程序直接崩溃。 通过异常处理,我们可以使程序更加健壮、用户友好。 异常处理的基本结构 Python中最基本的异常处…...

C++——多态(下)

目录 引言 多态 4.多态的原理 4.1 虚函数表指针 4.2 多态的原理 5.单继承和多继承关系的虚函数表 5.1 单继承中的虚函数表 5.2 多继承中的虚函数表 结束语 引言 接下来我们继续学习多态。 没有阅读多态(上)的可以点击下面的链接哦~ C——多态…...

qsort函数详解+代码展示

文章目录 概要系列文章目录前言(1) 定义(2) 使用(举例子 上代码)1、定义数组:2、定义比较函数:3、调用 qsort:4、输出结果: (3) 注意事项 小结 概要 本篇博客将详细地介绍qsort排序函数,&#x…...

leetcode hot100【LeetCode 136. 只出现一次的数字】java实现

LeetCode 136. 只出现一次的数字 题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 …...

(免费送源码)计算机毕业设计原创定制:Java+ssm+JSP+Ajax SSM棕榈校园论坛的开发

摘要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品,从而也带动了一系列与此相关产业,是人们的生活发生了翻天覆地的变化,而网络化的出现也在改变着人们传统的生活方式,包括工作,学习,社交…...

对抗攻击算法:FGSM和PGD

FGSM 传送门 FGSM 利用了梯度上升的思想,通过损失函数相对于输入图像的梯度来找到 最容易 迷惑网络的方向,并沿着这个方向对图像进行微小的扰动。 FGSM 的基本想法是,沿着这个梯度的符号方向对图像进行微调,以最大化损失函数。具…...

【八股文】小米

文章目录 一、vector 和 list 的区别?二、include 双引号和尖括号的区别?三、set 的底层数据结构?四、set 和 multiset 的区别?五、map 和 unordered_map 的区别?六、虚函数和纯虚函数的区别?七、extern C …...

xtu oj 众数

样例输入# 3 1 0 1 2 1 1 2 3 1 1 2 2样例输出# 1 2 3 解题思路:与数组大小有关,先排序 举个例子思考一下 n4 k2 数组为1 2 3 4 如果我们想让众数那个位的值为3(即max3),3出现的次数为3,即众数为3,需要修改多少次…...

ENVI计算ROI分离度为灰色compute roi separability

我们在使用ENVI做影像分类的时候,需要采集样本兴趣区(ROI),在采集完兴趣区需要计算样本ROI的分离度。 但是有时会发下你 计算ROI分离度的选项为灰色状态不能计算。 如果不是以下问题: “一个是必须首先选择或创建至少…...

Adaboost集成学习 | Python实现基于NuSVR-Adaboost多输入单输出回归预测

目录 效果一览基本介绍程序设计参考资料效果一览 基本介绍 基于NuSVR-Adaboost多输入单输出回归预测python代码 NuSVR是一种支持向量回归(SVR)算法的变体,用于解决回归问题。SVR是一种监督学习方法,它用于预测连续目标变量,而不是分类标签。NuSVR在SVR的基础上引入了一个…...

Python学习第十三天--面向对象,类和对象

一、面向过程和面向对象区别 面向过程:需要实现一个功能时,着重的是开发的步骤和过程,每个步都需要自己亲力亲为,需要编写代码(自己来做) 面向对象:需要实现一个功能时,不注重的是…...

AI运用落地思考:如何用AI进行系统运维?

1. 故障预测与预防 数据收集与分析:通过收集系统的各种运行数据,如服务器性能指标(CPU使用率、内存占用、磁盘I/O等)、网络流量数据、应用程序日志等。利用AI算法对这些海量数据进行分析,挖掘数据中的模式和相关性。例…...

springboot学习-分页/排序/多表查询的例子

最近喜欢上了springboot,真是个好的脚手架。今天继续学习分页/排序/多表查询等复杂功能。按步骤记录如下. 按步骤做的发现不可用,最终还是用的jdbctemplate解决。这也是一次经验。总计在最后。 1.maven依赖 首先从https://start.spring.io/ 选择需要的…...

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环,网络上也有很多 UI 自动化相关的知识或资料,具体到 windows 端的 UI 自动化,我们需要从以下几个方面考虑: 开发语言 毋庸置疑,在 UI 自动化测试领域&am…...

ffmpeg命令详解

原文网址:ffmpeg命令详解_IT利刃出鞘的博客-CSDN博客 简介 本文介绍ffmpeg命令的用法。 命令示例 1.mp4和avi的基本互转 ffmpeg -i D:\input.mp4 E:\output.avi ffmpeg -i D:\input.avi E:\output.mp4 -i 表示input,即输入。后面填一个输入地址和一…...

【漏洞复现】CVE-2022-43396

漏洞信息 NVD - CVE-2022-43396 In the fix for CVE-2022-24697, a blacklist is used to filter user input commands. But there is a risk of being bypassed. The user can control the command by controlling the kylin.engine.spark-cmd parameter of conf. 背景介绍…...

文件的摘要算法(md5、sm3、sha256、crc)

为了校验文件在传输中保证完整性和准确性,因此需要发送方先对源文件产生一个校验码,并将该值传输给接收方,将附件通过ftph或http方式传输后,由接收方使用相同的算法对接收文件再获取一个新的校验码,将该值和发送方传的…...

如何借助AI生成PPT,让创作轻松又高效

PPT是现代职场中不可或缺的表达工具,但同时也可能是令人抓狂的时间杀手。几页幻灯片的制作,常常需要花费数小时调整字体、配色与排版。AI的飞速发展为我们带来了革新——AI生成PPT的技术不仅让制作流程大大简化,还重新定义了效率与创意的关系…...

云技术-docker

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团…...

对docker安装的mysql实现主从同步

1:分别安装mysql主,从数据库 将主库容器名称改为mysql_master,将从库容器名称改为mysql_slave 安装教程:docker安装mysql 2:配置主库的my.cnf挂载文件 [mysqld] #log-bin:表示启用binlog功能,并指定二进制日志的存储目录。 log-binmysql-bin #binlog_f…...

【不定长滑动窗口】【灵神题单】【刷题笔记】

采摘水果 fruits[i]表示第i棵树上的水果种类目的是尽可能多收集水果规矩: 只有两个篮子,且每个篮子只能装一种水果,但是每个篮子能装的总量没限制一旦开始采摘,就会连续采摘,把两个篮子都用掉也就是说,采摘到最后一颗…...

AI写论文指令

一、论文选题指令 1、确定研究对象:我是一名xxx,请从以下素材内容中,结合xx相关知识,提炼出可供参考的学术概念 。以下是结合素材内容,提炼出的几个可供参考的学术概念 概念a:概念b:概念C&…...

2625扁平化嵌套数组

请你编写一个函数,它接收一个 多维数组 arr 和它的深度 n ,并返回该数组的 扁平化 后的结果。 多维数组 是一种包含整数或其他 多维数组 的递归数据结构。 数组 扁平化 是对数组的一种操作,定义是将原数组部分或全部子数组删除,…...

QT6学习第五天 第一个QT Quick程序

QT6学习第五天 第一个QT Quick程序 概述创建Qt Quick程序使用Qt资源文件 概述 如果将程序的用户界面成为前端,程序的数据存储和逻辑业务成为后端,那么传统QT Widgets程序的前后端都是用C完成的。对于现代软件开发而言,前端演化速度远快于后端…...

【开发商城系统】

在广西开发商城系统,可以按照以下步骤进行: 确定项目需求:与客户沟通,了解商城系统所需的功能和特性,并确定项目的预算和时间限制。 进行市场调研:了解广西地区的电商市场情况,包括竞争对手、消…...

(11)(2.2) BLHeli32 and BLHeli_S ESCs(二)

文章目录 前言 1 传递支持 前言 BLHeli 固件和配置应用程序的开发是为了允许配置 ESC 并提供额外功能。带有此固件的 ESC 允许配置定时、电机方向、LED、电机驱动频率等。在尝试使用 BLHeli 之前,请按照 DShot 设置说明进行操作(DShot setup instructions)。 1 传…...

C++ 11重点总结1

智能指针 智能指针: C11引入了四种智能指针: auto_ptr(已弃用)、unique_ptr、shared_ptr和weak_ptr。智能指针可以更有效地管理堆内存,并避免常见的内存泄漏问题。 shared_ptr: 自定义删除器。 shared_ptr使用引用计数来管理它指向的对象的生命周期。多个shared_ptr实例可以指向…...

海康VsionMaster学习笔记(学习工具+思路)

一、前言 VisionMaster算法平台集成机器视觉多种算法组件,适用多种应用场景,可快速组合算法,实现对工件或被测物的查找测量与缺陷检测等。VM算法平台依托海康威视在图像领域多年的技术积淀,自带强大的视觉分析工具库,可…...

基于Python语言的Web爬虫设计源码

基于Python语言的Web爬虫设计源码地址 该项目是一个基于Python语言的Web爬虫设计源码,包含20个文件,其中18个为Python源代码文件,1个Markdown文件用于文档说明,以及1个配置文件。该爬虫专注于网络信息的抓取与处理。 关键词 Py…...

学习日志 --A5rZ

24.11.27 0001:2024 强网杯青少年专项赛 EnterGam 复现已完成 0002:在x86上模拟arm64(搁置,原因:资料过少,可行性过低) 0003:2024 强网杯青少年专项赛 Flip_over 复现终止(无arm真机) 0004: 开始复现 2024 强网杯青少年专项赛 journey_story...

wordpress 插入文章/河北网站建设案例

KUKA机器人码垛程序怎么写(案例)注:本文章文字、图片部分来自网络版权归原作者,侵删。工博士提供了KUKA,Yaskawa,ABB,Kawasaki和FANUC等各种新型机器人。我们相信,我们真正地在协助第四次工业革命的进步&am…...

做网站是什么鬼/2024年小学生简短小新闻

夜光序言: 后来才明白,要赚到足够令自己安心的钱,才能过上简单、安逸、自由的生活,才能让自己活得更有底气。所以,多花时间努力,少点功夫矫情。 正文: 比如说:一个人A为父类&#x…...

电商网站怎么做微信支付/怎样宣传自己的产品

有时候我们需要在图片的某一个地方添加一个url&#xff0c;最好的办法就是为图片添加热点&#xff0c; 实例&#xff1a; <img src"zhaobiaowang.jpg" width"1002" height"750" border"0" usemap"#Map" /> <map n…...

做二手房比较好的网站/广告词

一、Nginx的简介 1、Nginx &#xff08;engine x&#xff09; 是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个邮件代理服务器、TCP/UDP代理服务器&#xff1b; 2、Nginx 最初是由俄罗斯人 Igor Sysoev 采用C语言开发编写的&#xff0c;第一个公开版本0.1.0发布于2004…...

公司注册后怎么做网站/seo关键词如何布局

1 引言 摘要&#xff1a;在这项工作中&#xff0c;我们旨在构建一个性能强大的简单&#xff0c;直接和快速的实例分割框架。我们遵循SOLOv1方法的原理。" SOLO&#xff1a;按位置分割对象"。重要的是&#xff0c;我们通过动态学习目标分割器的mask head 。具体来说&a…...

wordpress统计插件WP/seo排名查询软件

来源&#xff5c;新熵编辑&#xff5c;于松叶盲盒市场的不确定性正在加大。泡泡玛特的雷款滞销、利用福袋去库存等问题只是头部品牌透支用户信任、损失用户好感度的行为缩影&#xff0c;进入更大的视野&#xff0c;会发现整个盲盒市场已经开始趋于冷静和理智。盲盒圈就像一个围…...