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

devtools/2024/10/15 19:10:35/

        在 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 块中的代码都会被执行,通常用于清理资源,如关闭文件或网络连接。

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

python">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 类或其子类。

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

python">class CustomError(Exception):pass

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

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

python">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 语句用于手动触发或引发异常。

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

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


http://www.ppmy.cn/devtools/97903.html

相关文章

简易版PHP软文发稿开源系统

软文发稿系统源码(软文发布系统)基于旧版本的媒介软文项目基础上整理出一套简易版,以满足不同客户群体。虽然是简易版 但麻雀虽小五脏俱全,基本能满足小众群体需求 具体功能如下: 大模块功能: 1、媒体发布 …

【C++初阶】一篇手撕vector类

vector类 一&#xff0c;vector的介绍二&#xff0c;vector的使用2.1 vector的定义2.2 vector iterator2.3 vector空间增长问题2.4 vector增删查改2.5 vector<char> 可以替代 string 嘛&#xff1f; 一&#xff0c;vector的介绍 vector 是表示可变大小数组序列容器。就像…

记录一次搭建uniapp-vue3的基础项目

1.使用 HBuilder X 创建uniapp vue3的基础项目 2.安装 自动导包插件 unplugin-auto-import npm install unplugin-auto-import或者 pnpm install unplugin-auto-import2.1 根目录下创建 vite.config.js 复制粘贴以下内容 import { defineConfig } from vite import uni fro…

网络编程第三天

服务器&#xff1a; #include<sys/types.h> // 支持套接字地址结构 #include <sys/socket.h> // 提供套接字API #include <netinet/in.h> // 定义IP地址结构体 #include <string.h> // 提供字符串操作函数 #include <stdio.h> // 提供标准I/O操…

数字化转型对金融服务业的影响

数字化转型正在塑造每个行业&#xff0c;从快速消费品到金融&#xff0c;每个行业都受到新兴技术的影响。 那么&#xff0c;数字化转型在金融服务中扮演什么角色&#xff1f;这对招聘前景有何影响&#xff1f; 我们探讨了数字化转型对该行业的影响、其对招聘策略的影响、数据…

别人入门request一天,而你只需要一篇文章就可以入门

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装 requests二、使用requests1.发送 GET 请求1.发送带有请求参数的GET请求2.GET请求设置请求头 2.发送 POST 请求1.发送带有请求data参数的POST请求2.发送…

MyBatis源码系列2(简易版MyBatis)

通过上一篇分析可知&#xff0c;可以访问数据库繁琐步骤封装为两部分完成。 步骤1、使用数据库连接池完成数据库的连接&#xff1b; 步骤2、封装一个“方法”&#xff0c;入参为脚本&#xff0c;出参为“目标”数据。 通过步骤2可以看出&#xff0c;脚本是与“目标数据”绑定在…

【NI国产替代】NI-9218 全国产替代,2通道C系列通用模拟输入模块

51.2 kS/s/ch&#xff0c;2通道C系列通用模拟输入模块 NI‑9218专为多用途测量而设计。 它使用针对特定测量的适配器提供了对加速度计、供电传感器、全桥和电压测量以及四分之一桥、半桥、60V和电流测量的内置支持。 每个通道可单独选择&#xff0c;因而用户可在各个通道上进行…