Python中try用法、内置异常类型与自定义异常类型拓展

目录

  • try介绍与语法格式
  • try具体使用案例
  • except的异常类型
    • 简介
    • 案例
    • 内置的常见异常类型
    • 自定义异常类型
      • 继承关系
      • 用途
    • 注意事项

try介绍与语法格式

在 Python 里,try 语句主要用于异常处理,其作用是捕获并处理代码运行期间可能出现的异常,避免程序因异常而意外终止。try 语句通常会和 exceptelse 以及 finally 子句搭配使用。具体语法框架如下:

try:# 可能会引发异常的代码块pass
except ExceptionType1:# 处理特定类型异常的代码块pass
except ExceptionType2:# 处理另一种特定类型异常的代码块pass
else:# 当 try 代码块没有引发异常时执行的代码块pass
finally:# 无论 try 代码块是否引发异常,都会执行的代码块pass

在 Python 里,pass 是一个空语句,它不执行任何操作,主要用于占位,保证代码的语法完整性。

try具体使用案例

下面结合前面读取 .xlsx 文件的代码详细讲解其用法:

import openpyxldef read_xlsx(file_path):try:# 以二进制模式打开 .xlsx 文件workbook = openpyxl.load_workbook(file_path)# 获取活动工作表sheet = workbook.active# 遍历工作表中的每一行for row in sheet.iter_rows(values_only=True):print(row)except FileNotFoundError:print(f"错误:未找到文件 {file_path}。")except Exception as e:print(f"发生未知错误:{e}")if __name__ == "__main__":file_path = 'example.xlsx'read_xlsx(file_path)
  1. try 代码块包含了可能会引发异常的代码。在这个例子中,openpyxl.load_workbook(file_path)
    尝试打开指定路径的 .xlsx 文件,若文件不存在或者文件格式有误,就可能会引发异常。

  2. 后续的代码如获取活动工作表和遍历工作表中的行,在文件打开成功后执行,同样可能会因为文件内容不规范等原因引发异常。

  3. except FileNotFoundError:专门处理FileNotFoundError异常,也就是当指定的文件不存在时,会执行该代码块中的语句,打印出错误信息。

  4. except Exception as e:这是一个通用的异常处理块,会捕获除 FileNotFoundError之外的其他所有异常,并将异常信息存储在变量 e 中,然后打印出未知错误信息。

except的异常类型

简介

在 Python 里,try-except 语句会依据 try 代码块抛出的异常类型来判定执行哪个 except 子句。当 try 代码块出现异常时,Python 会按顺序检查每个 except 子句,查看其指定的异常类型是否与抛出的异常类型相匹配。若匹配成功,就会执行该 except 子句里的代码。

案例

下面给出一个示例,借助打印信息来明确执行了哪个 except 子句:

try:# 可能会引发异常的代码块result = 1 / 0  # 这里会引发 ZeroDivisionError
except ZeroDivisionError:# 处理特定类型异常的代码块print("执行了 ZeroDivisionError 异常处理")
except ValueError:# 处理另一种特定类型异常的代码块print("执行了 ValueError 异常处理")
else:# 当 try 代码块没有引发异常时执行的代码块print("try 代码块没有引发异常")
finally:# 无论 try 代码块是否引发异常,都会执行的代码块print("finally 代码块始终会执行")

在这个示例中,try 代码块里的 1 / 0 会引发 ZeroDivisionError 异常。所以,Python 会检查各个 except 子句,发现 ZeroDivisionError 匹配第一个 except 子句,进而执行该子句里的代码,输出 “执行了 ZeroDivisionError 异常处理”。

内置的常见异常类型

以下是Python中常见的可被except捕获的内置异常类型汇总表格(基于Exception基类体系):

在这里插入图片描述

自定义异常类型

自定义异常需要继承自 Python 的内置异常类,通常是 Exception 类。下面是一个自定义异常的示例:

# 定义一个自定义异常类
class MyCustomError(Exception):passtry:# 模拟抛出自定义异常raise MyCustomError("这是一个自定义异常")
except MyCustomError as e:print(f"捕获到自定义异常: {e}")

在上述代码中,MyCustomError 是自定义的异常类,它继承自 Exception 类。在 try 代码块中使用 raise 关键字抛出这个自定义异常,然后在 except 语句中捕获并处理它。

继承关系

Exception 类继承自 BaseException,不过像 SystemExitKeyboardInterruptGeneratorExit 这类系统退出相关的异常直接继承自 BaseException,而非 Exception。这意味着 Exception 类涵盖的是常规的程序运行时错误,并非用于处理系统层面的退出事件。

用途

  • 捕获通用异常:在编写代码时,若不确定会出现哪种具体的异常,可使用 Exception 类来捕获所有常规异常。
  • 创建自定义异常:可以通过继承 Exception 类来创建自定义的异常类,从而在特定场景下抛出这些自定义异常。

注意事项

  • 慎用 except Exception:虽然 except Exception 能捕获所有常规异常,但可能会掩盖一些本应被关注的特定异常,使调试变得困难。因此,在可能的情况下,最好捕获具体的异常类型。
  • 自定义异常的命名:自定义异常类的命名应清晰地反映其用途,通常以 Error 结尾,比如
    DatabaseErrorValidationError 等。

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

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

相关文章

【第41节】windows的中断与异常及异常处理方式

目录 一、中断与异常处理 1.1 中断与异常 1.2 IDT 1.3 异常的概念 1.4 异常分类 二、windows异常处理方式 2.1 概述 2.2 结构化异常处理 2.3 向量化异常处理之VEH 2.4 向量化异常处理之VCH 2.5 默认的异常处理函数 2.6 如何手动安装 SEH 节点 2.7 异常处理的优先级…

分布式日志治理:Log4j2自定义Appender写日志到RocketMQ

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

【HTML】html文件

HTML文件全解析:搭建网页的基石 在互联网的广袤世界里,每一个绚丽多彩、功能各异的网页背后,都离不开HTML文件的默默支撑。HTML,即超文本标记语言(HyperText Markup Language),作为网页创建的基…

oracle命令上下左右键无法使用如何解决?

1、问题如图 2、解决办法 (1) 安装readline yum -y install readline* (2)安装 rlwrap ##下载 wget http://files.cnblogs.com/files/killkill/rlwrap-0.30.tar.gz.zip ##解压 tar -xzvf rlwrap-0.30.tar.gz.zip ##编译安装 ./configure make &&…

vue事假机制都有哪些

Vue 的事件机制主要包含以下几种类型和方式,可以分为组件内部事件、父子组件通信事件、原生 DOM 事件封装、修饰符增强等,下面详细分类介绍: 一、DOM 事件绑定(最基础的事件) 使用 v-on(或简写 &#xff0…

系统编程2(消息队列)

⦁ 消息队列概念 Linux系统中消息队列(Message Queue)是进程间通信的一种方式,这种通信机制的好处是可以传输指定类型(用户可以自行定义)的数据,相同类型的数据根据到达顺序在队列中进行排队。 当然,不同类型的数据不…

Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(二)

Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(二) 7. 实现条件WGAN-GP # 训练条件WGAN-GP def train_conditional_wgan_gp():# 用于记录损失d_losses []g_losses []# 用于记录生成样本的多样性(通过类别分…

python 微博爬虫 01

起因, 目的: ✅下载单个视频,完成。✅ 获取某用户的视频列表,完成。剩下的就是, 根据视频列表,逐个下载视频,我没做,没意思。获取视频的评论,以后再说。 关键点记录: 1. 对一个视…

Servlet、HTTP与Spring Boot Web全面解析与整合指南

目录 第一部分:HTTP协议与Servlet基础 1. HTTP协议核心知识 2. Servlet核心机制 第二部分:Spring Boot Web深度整合 1. Spring Boot Web架构 2. 创建Spring Boot Web应用 3. 控制器开发实践 4. 请求与响应处理 第三部分:高级特性与最…

vue中根据html动态渲染内容2.0

上次使用的是p标签用的contenteditable代替的可编辑的input,最后实现还是选择了用el-input的textarea方式。 一开始考虑的是需要根据用户输入自动撑开输入框,所以选择了p标签可编辑。 最后发现还是el-input会更好一点,只不过需要处理输入框撑…

CentOS 系统磁盘扩容并挂载到根目录(/)的详细步骤

在使用 CentOS 系统时,经常会遇到需要扩展磁盘空间的情况。例如,当虚拟机的磁盘空间不足时,可以通过增加磁盘容量并将其挂载到根目录(/)来解决。以下是一个完整的操作流程,详细介绍了如何将新增的 10G 磁盘…

LINUX基础 [二] - Linux常见指令

目录 💻前言 💻指令 🎮ls指令 🎮pwd指令 🎮whoami指令 🎮cd指令 🎮clear指令 🎮touch指令 🎮mkdir指令 🎮rmdir指令 🎮rm指令 &#…

基于php的成绩分析和预警与预测网站(源码+lw+部署文档+讲解),源码可白嫖!

摘要 人类现已迈入二十一世纪,科学技术日新月异,经济、资讯等各方面都有了非常大的进步,尤其是资讯与网络技术的飞速发展,对政治、经济、军事、文化、教育等各方面都有了极大的影响。 利用电脑网络的这些便利,发展一套…

《从底层逻辑剖析:分布式软总线与传统计算机硬件总线的深度对话》

在科技飞速发展的当下,我们正见证着计算机技术领域的深刻变革。计算机总线作为信息传输的关键枢纽,其发展历程承载着技术演进的脉络。从传统计算机硬件总线到如今备受瞩目的分布式软总线,每一次的变革都为计算机系统性能与应用拓展带来了质的…

Spring Boot 3.5新特性解析:自动配置再升级,微服务开发更高效

📝 摘要 Spring Boot 3.5作为Spring生态的最新版本,带来了多项令人振奋的改进。本文将深入解析其中最核心的自动配置增强特性,以及它们如何显著提升微服务开发效率。通过详细的代码示例和通俗易懂的讲解,您将全面了解这些新特性在…

【前端】webpack一本通

今日更新完毕,不定期补充,建议关注收藏点赞。 目录 简介Loader和Plugin的不同?(必会) 使用webpack默认只能处理js文件 ->引入加载器对JS语法降级,兼容低版本语法合并文件再次打包进阶 工作原理Webpack 的…

leetcode 264. Ugly Number II

动态规划解决。 关键是理解如何生成新的丑数。这道题和经典的斐波那契数列问题其实是一样的。求第n个数,需要用第n个数前面的数来求。不同的是,斐波那契数列不会重复。而本题的丑数,会重复出现。 class Solution { public:int nthUglyNumbe…

深入理解 HTML5 语义元素:提升网页结构与可访问性

引言 在构建网页的过程中,合理的结构与清晰的语义对于网页的质量、可维护性以及搜索引擎优化(SEO)都至关重要。HTML5 引入了一系列语义元素,为开发者提供了更精准描述网页内容的工具。本文将深入探讨 HTML5 语义元素的作用、使用…

PyCharm显示主菜单和工具栏

显示主菜单 新版 PyCharm 是不显示主菜单的,要想显示主菜单和工具栏,则通过 “视图” → “外观” ,勾选 “在单独的工具栏中显示主菜单” 和 “工具栏” 即可。 设置工具栏 此时工具栏里并没有什么工具,因此我们需要自定义工具…

CyclicBarrier 基本用法

CyclicBarrier 基本用法 简介 CyclicBarrier 是 Java 并发包(java.util.concurrent)中的一个同步辅助类。它允许一组线程相互等待,直到到达某个公共屏障点(common barrier point)。只有当所有参与的线程都到达屏障点…