python进阶语法---异常处理

        在 Python 中,异常处理是一种机制,用于处理程序运行时可能发生的错误,以确保程序能够优雅地处理错误情况,而不是直接崩溃。异常处理机制的核心是使用 tryexceptelsefinally 语句。

一、基础语法

异常处理的基本语法如下:

try:# 可能会引发异常的代码risky_code()
except SomeException as e:# 处理异常的代码print(f"An error occurred: {e}")
else:# 没有异常发生时执行的代码print("No errors occurred.")
finally:# 无论是否发生异常,都会执行的代码print("This will run no matter what.")

基础语法解释: 

  • try 块:包含可能引发异常的代码。如果没有异常发生,程序会跳过 except 块和 finally 块。
  • except 块:用于捕获和处理异常。可以指定捕获特定类型的异常,也可以捕获所有异常。通过 as e 语法,可以将异常对象赋给变量 e,以便获取更多的错误信息。
  • else 块:如果 try 块中的代码没有引发任何异常,else 块中的代码将会被执行。
  • finally 块:无论是否发生异常,finally 块中的代码都会被执行,通常用于清理资源,如关闭文件或网络连接。

 下面是一个简单的异常处理示例:

try:# 可能会出错的代码result = 10 / 0
except ZeroDivisionError as err:# 捕获 ZeroDivisionError 异常,并将异常对象赋值给 err 变量print("发生了除零错误:", err)
finally:# 在异常处理之后执行print("程序结束")

在上面的示例中,由于除法运算尝试将一个数除以零,会触发 ZeroDivisionError 异常,程序会跳转到 except 语句块中进行异常处理,并输出错误信息 "发生了除零错误: division by zero",最后无论是否发生异常,都会执行 finally 语句块中的代码,输出 "程序结束"。

你可以在一个 except 块中捕获多个异常类型,也可以使用多个 except 块: 

try:# 代码块pass
except (TypeError, ValueError) as e:print(f"An error occurred: {e}")
except ZeroDivisionError as e:print(f"Division error: {e}")

二、自定义异常

        在Python中,我们可以自定义异常类来处理特定的错误情况。自定义异常类可以继承自内置的 Exception 类或其子类。

下面是一个简单的自定义异常类示例:

class CustomError(Exception):pass

        在上面的示例中,我们定义了一个名为 CustomError 的异常类,该类继承自 Exception 类。通过这样的定义,我们可以创建属于 CustomError 类的异常对象,并使用它们来触发和捕获自定义的异常。

下面是一个使用自定义异常类的示例:

class CustomError(Exception):passdef divide_by_zero(num):if num == 0:raise CustomError("除数不能为零")else:return 10 / numtry:result = divide_by_zero(0)
except CustomError as err:print("捕获到自定义异常:", err)

在上面的示例中,我们定义了一个名为 divide_by_zero 的函数,该函数接受一个参数 num。如果 num 的值为零,则会手动触发一个 CustomError 异常。在 try 语句块中,我们调用 divide_by_zero 函数并传入零作为参数,由于除数为零,会触发自定义异常,并将异常对象赋值给 err 变量。最后,我们捕获到了自定义异常,并打印出错误信息 "捕获到自定义异常: 除数不能为零"。

        通过自定义异常,我们可以根据程序的需求和特定的错误情况来扩展异常处理的能力。

三、raise语句

        在Python中,raise 语句用于手动触发或引发异常。

# 引发 ValueError 异常
raise ValueError("无效的值")# 引发自定义异常
class CustomError(Exception):pass
raise CustomError("自定义异常")# 引发异常并使用默认的错误消息
raise TypeError

        raise 语句通常会与 try 和 except 语句一起使用,以便能够在异常发生时捕获并处理它们。这样,我们可以根据具体情况选择在何处引发异常,并在适当的地方进行异常处理。 

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

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

相关文章

【JAVA CORE_API】Day18 网络编程、线程、在线聊天室v1.0

C/S:客户端/服务器端,所有网络应用都是基于客户端服务器端进行的,Java写的是服务端,客户端是一个软件,服务端也是一个软件,两个软件之间交互;(只能连接对应的服务器) B/…

深度学习-k-mean实现聚类

对模拟函数生成的随机数据,分为三个族群。 1.生成数据 设定样本数量、特征数、族群数,以及簇内标准差之后,通过make_blobs生成随机数据。 scikit-learn库中的make_blobs函数来生成模拟数据集的,用于创建多类单标签数据集&#…

吐血整理 ChatGPT 3.5/4.0/4o 新手使用手册~

都知道ChatGPT很强大,聊聊天、写论文、搞翻译、写代码、写文案、审合同等等,无所不能~ 那么到底怎么使用呢?其实很简单了,国内AI产品发展也很快,很多都很好用了~ 我一直在用,建议收藏下来~ 有最先进、最…

基于 Appium 的 App 爬取实战

除了运行 Appium 的基本条件外,还要一个日志输出库 安装: pip install loguru 思路分析 首先我们观察一下整个 app5 的交互流程,其首页分条显示了电影数据, 每个电影条目都包括封面,标题, 类别和评分 4…

Godot《躲避小兵》实战之创建玩家场景

项目设置完之后,我们就可以开始处理玩家控制的角色。 这里我们将玩家放在一个单独的场景当中,这样做的好处是在游戏的其他部分做出来之前,我们就可以对其进行单独测试。 节点结构 场景是一个节点树结构,因此一个场景需要有一个…

GitHub每日最火火火项目(8.21)

goauthentik / authentik: 项目介绍:authentik 是一个提供认证功能的工具,它似乎是 GitHub 社区当前非常关注的项目。虽然关于它的具体功能和特点在给定的文本中没有详细说明,但可以推测它在认证方面具有重要的作用,可…

WordPress美化节日灯笼插件,适合春节的时候使用

源码介绍: WordPress美化节日灯笼插件,适合每年过年的时候安在网站上使用,这款插件可以备用着,一款WordPress节日灯笼美化插件,可以给网页自动加一个灯笼效果使用说明:到网站WP后台 - 插件 - 安装插件 - 上…

Linux外设接口使用及内核驱动开发---模拟Framebuffer及应用接口

文章目录 前言一、模拟Framebuffer驱动1.总体功能2.驱动代码3.简要说明二、应用层1.总体功能2. 例子代码主函数三.运行结果前言 驱动端实现Linux模拟Framebuffer驱动;应用端采用GTK+实现多个应用程序通过接口/dev/fbXXX访问Framebuffer.基于该接口,可以在PC电脑Ubuntu系统实…

[C#]基于winform结合photocartoon算法实现人物卡通化源码实现

【官方框架】 https://github.com/minivision-ai/photo2cartoon 简介 人像卡通风格渲染的目标是,在保持原图像ID信息和纹理细节的同时,将真实照片转换为卡通风格的非真实感图像。我们的思路是,从大量照片/卡通数据中习得照片到卡通画的映射…

企业级web应用服务器tomcat

目录 一、Web技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS(Cascading Style Sheets)层叠样式表 1.2.3 JavaScript 二、tomcat的功能介绍 2.1 安装 tomcat 环境准备 2.1.1 安装java环境 2.1.2 安装并启动tomcat …

vscode提升:JSON 中不允许有注释

解决方案 : 运行: json with comment 参考链接: https://blog.csdn.net/eqizhihui/article/details/134014010 人工智能学习网站 https://chat.xutongbao.top

基于飞腾平台的Hbase的安装配置

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

iOS Native与JS通信:JSBridge

文章目录 一、简介二、JS 调用 Native1.使用 URL Schemea.UIWebViewb.WKWebView 2.使用 JavaScriptCore (iOS 7)3.使用 WKWebView 和 WKScriptMessageHandler (iOS 8) 三、Native 调用 JS1.使用 UIWebView2.使用 WKWebView3.使用 JavaScriptCore (iOS 7) 一、简介 对于移动应用…

深入浅出:你需要了解的用户数据报协议(UDP)

文章目录 **UDP概述****1. 无连接性****2. 尽最大努力交付****3. 面向报文****4. 多种交互通信支持****5. 较少的首部开销** **UDP报文的首部格式****详细解释每个字段** **UDP的多路分用模型****多路分用的实际应用** **检验和的计算方法****伪首部的详细内容****检验和计算步…

Python 数据分析之Numpy学习(一)

Python 数据分析之Numpy学习(一) 一、Numpy的引入 1.1 矩阵/向量的按位运算 需求:矩阵的按位相加 [0,1,4] [0,1,8] [0,2,12] 1.1.1 利用python实现矩阵/向量的按位运算 # 1.通过列表实现 list1 [0, 1, 4] list2 [0, 1, 8]# 列表使用…

iOS 18 Beta 5:苹果的细腻之笔,绘制用户体验新画卷

在苹果的世界里,每一次系统更新都是对用户体验进行的一次精心雕琢。 随着iOS 18 Beta 5的上线,苹果带来了一系列令人耳目一新的功能,同时也在系统的每个细微之处展现了对完美的追求。 Safari浏览器的“干扰控制”功能 在今天信息充斥的数字…

SpringBoot接入高德地图猎鹰轨迹服务API

SpringBoot接入高德地图猎鹰轨迹服务API 一、AP文档 猎鹰轨迹服务API文档 二、页面图 1、需登录账号,申请对应的应用key值 三、代码部分: 1、控制层 RestController RequestMapping("/gdTrack") public class TrackController {private …

C++实现取两个经纬度的距离

参考QT源码 distanceTo函数: https://code.qt.io/cgit/qt/qtpositioning.git/tree/src/positioning/qgeocoordinate.cpp https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/kernel/qmath.h 参考公式: https://blog.csdn.net/gaocuisheng/article/details/126060795…

搜维尔科技:【研究】Haption Virtuose外科手术触觉视觉学习系统的开发和评估

Haption面临挑战 除此之外,外科医生有时会对骨组织进行非常复杂的手术,其中一个例子是人工耳蜗的手术植入。重要的是要避免神经或血管等危险结构受伤,并尽可能轻柔地进行手术。在外科医生能够安全、无差错地进行此类手术之前,需要…

Flink常见数据源使用教程(DataStream API)

前言 一个 Flink 程序,其实就是对 DataStream 的各种转换。具体来说,代码基本上都由以下几部分构成,如下图所示: 获取执行环境(execution environment)读取数据源(source)定义基于数据的转换操作(transformations)定义计算结果的输出位置(sink)触发程序执行(exec…