python基础篇(8):异常处理
在Python编程中,异常是程序运行时发生的错误,它会中断程序的正常执行流程。异常处理机制使得程序能够捕获这些错误,并进行适当的处理,从而避免程序崩溃。
1 错误类型
代码的错误一般会有语法错误和异常错误两种,语法错误就是代码没有按照 Python 规定语法去写导致程序无法执行,比如代码的格式、缩进等。另外一种是异常错误,即使语法正确,程序在运行过程中也可能会出错,比如用户输入了错误的内容,列表的索引不存在,字典的key不存在等等。
使用异常处理可以在异常错误的时候,执行特定的逻辑,让程序可以继续执行,如果不对异常捕获,程序将终止执行。
异常的分类
(1)内置异常类
- zeroDivisionError:除(或取模)零
- IndexError:序列中没有此索引(index)
- KeyError:映射中没有这个键
- SyntaxError:Python 语法错误
- OSError:操作系统异常(如:文件打开异常)
- keyboardInterrupt:键盘中断错误,Ctrl+c使得程序异常退出
- RuntimeError:运行时错误
- Exception:所有异常的父类
(2)自定义异常类
可以通过自定义类,继承 Exception 实现。
2 捕获异常
2.1 捕获常规异常
try:可能发生错误的代码
except:如果出现异常执行的代码
示例如下:
需求:尝试以`r`模式打开文件,如果文件不存在,则以`w`方式打开。
try:f = open('linux.txt', 'r')
except:f = open('linux.txt', 'w')
2.2 捕获指定异常
try:print(name)
except NameError as e:print('name变量名称未定义错误')
注意事项:
- 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
- 一般try下方只放一行尝试执行的代码。
2.3 捕获多个异常
当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写。
try:print(1/0)
except (NameError, ZeroDivisionError) as e:print(e)
结果如下:

也可以使用带有分支的异常处理,如下:
try:# 可能会引发异常的代码print(1/0)
except ValueError as ve:# 处理ValueError的代码print(f"ValueError occurred: {ve}")
except ZeroDivisionError as ze:# 处理ValueError的代码print(f"ZeroDivisionError occurred: {ze}")
except TypeError as te:# 处理TypeError的代码print(f"TypeError occurred: {te}")
except Exception as e:# 处理其他所有类型的异常print(f"An error occurred: {e}")
结果如下:

2.4 捕获所有异常
try:print(name)
except Exception as e:print(e)
结果如下:

2.5 捕获else分支
还可以使用 else 和 finally 子句。
- else:当try块中的代码没有引发异常时,执行else块的代码。
- finally:无论是否发生异常,finally块的代码总会执行。
try:f = open('test.txt', 'r')
except Exception as e:f = open('test.txt', 'w')
else:print('没有异常,真开心')
finally:f.close()
3 抛出异常
在Python中,可以使用 raise 关键字手动抛出异常。
def divide(x, y):if y == 0:raise ValueError("y cannot be zero")return x / ydivide(4, 2)
divide(3, 0)
结果如下:

可以在函数或代码块中根据需要抛出特定类型的异常,以便在其他地方进行捕获和处理。
4 自定义异常
有时标准异常不足以描述特定的错误情况,可以通过创建自定义异常类来定义新的异常类型
class CustomError(Exception):"""自定义异常类"""def __init__(self, message):self.message = messagedef __str__(self):return f"CustomError: {self.message}"# 使用自定义异常
try:raise CustomError("This is a custom error")
except CustomError as ce:print(ce)
结果如下:

5 异常传递
当一个异常在函数中未被处理时,该异常会向上传递到调用该函数的地方,直到被捕获或到达程序的顶层,从而导致程序崩溃。
- read_file函数试图打开一个文件,如果文件不存在,会捕获FileNotFoundError并抛出一个自定义的CustomError。
- process_file函数调用read_file并尝试处理文件内容,如果发生CustomError,会捕获并重新抛出。
- 最外层的try...except语句最终捕获并处理CustomError,输出错误信息。
class CustomError(Exception):"""自定义异常类"""def __init__(self, message):self.message = messagedef __str__(self):return f"CustomError: {self.message}"def read_file(file_path):try:with open(file_path, 'r') as file:return file.read()except FileNotFoundError as e:raise CustomError(f"File not found: {file_path}") from edef process_file(file_path):try:content = read_file(file_path)# 假设这里有其他处理文件内容的代码return contentexcept CustomError as ce:print(ce)raisetry:file_content = process_file("non_existent_file.txt")
except CustomError as ce:print(f"Handled at top level: {ce}")
结果如下:

相关文章:
python基础篇(8):异常处理
在Python编程中,异常是程序运行时发生的错误,它会中断程序的正常执行流程。异常处理机制使得程序能够捕获这些错误,并进行适当的处理,从而避免程序崩溃。 1 错误类型 代码的错误一般会有语法错误和异常错误两种,语法错…...
FortiClient 用IPsec VPN 远程拨号到FortiGate说明文档
说明:本文档针对IPsec VPN 中的Remote VPN 进行说明,即远程用户使用PC中的FortiClient软件,通过VPN拨号的方式连接到公司总部FortiGate设备,访问公司内部服务器。在配置之前需要统一VPN策略和参数,如模式… 说明&#…...
Git-Unity项目版本管理
目录 准备GitHub新建项目并添加ssh密钥Unity文件夹 本文记录如何用git对unity 项目进行版本管理,并可传至GitHub远端。 准备 名称版本windows11Unity2202.3.9.f1gitN.A.githubN.A. GitHub新建项目并添加ssh密钥 GitHub新建一个repositorywindows11 生成ssh-key&…...
每日一题~ leetcode 402 (贪心+单调栈)
click me! 这个贪心的推导在leetcode上已经很明确了。 click me! 删除k个数,可以先考虑删除一个数。这也是一种常见的思路。(如果进行同样的操作多次,可以先只 考虑一次操作如何实现,或者他的影响。完成这一次操作后,…...
设计模式之模版方法
模版方法介绍 模版方法(Template Method)模式是一种行为型设计模式,它定义了一个操作(模板方法)的基本组合与控制流程,将一些步骤(抽象方法)推迟到子类中,使得子类可以在…...
docker部署redis/mongodb/
一、redis 创建/root/redis/conf/redis.conf 全部执行命令如下 docker run -it -d --name redis -p 6379:6379 --net mynet --ip 172.18.0.9 -m 400m -v /root/redis/conf:/usr/local/etc/redis -e TXAsia/Shangehai redis redis-server /usr/local/etc/redis/redis.conf 部署…...
LeetCode 581. 最短无序连续子数组
更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡,更多解法等你一起来参与哦! LeetCode 581. 最短无序连续子数组,难度中等。 排序 解题思路:首先对数组排序,然后找出两侧顺序的数组&#x…...
数据库可视化管理工具dbeaver试用及问题处理。
本文记录了在内网离线安装数据库可视化管理工具dbeaver的过程和相关问题处理方法。 一、下载dbeaver https://dbeaver.io/download/ 笔者测试时Windows平台最新版本为:dbeaver-ce-24.1.1-x86_64-setup.exe 二、安装方法 一路“下一步”即可 三、问题处理 1、问…...
29、php实现和为S的两个数字(含源码)
题目:php 实现 和为S的两个数字 描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数, 是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测…...
Spring Boot中的全局异常处理
Spring Boot中的全局异常处理 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中实现全局异常处理,这是保证应用…...
中英双语介绍美国苹果公司(Apple Inc.)
中文版 苹果公司简介 苹果公司(Apple Inc.)是一家美国跨国科技公司,总部位于加利福尼亚州库比蒂诺。作为全球最有影响力的科技公司之一,苹果以其创新的产品和设计引领了多个科技领域的变革。以下是对苹果公司发展历史、主要产品…...
C语言牢大坠机
目录 开头程序程序的流程图《牢大坠机》结尾 开头 大家好,我叫这是我58,今天,我们要来看关于牢大坠机的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #define HIGH 66 #include <stdio.h> #include <Windows.h> int ma…...
zdppy+vue3+antd 实现表格单元格编辑功能
初步实现 <template><a-button class"editable-add-btn" style"margin-bottom: 8px" click"handleAdd">Add</a-button><a-table bordered :data-source"dataSource" :columns"columns"><templa…...
elasticsearch索引怎么设计
Primary Shard(主分片) Primary Shard(主分片)是索引数据存储的基本单位,承担着数据写入和查询的职责。以下是关于Primary Shard的一些关键点: 1. 数据分布:每个索引在创建时会被分成多个主分…...
React 中 useState 和 useReducer 的联系和区别
文章目录 使用场景使用 useState使用 useReducer 联系区别用法状态更新逻辑适用场景可读性和可维护性 使用场景 使用 useState 状态逻辑简单。只涉及少量的状态更新。需要快速和简单的状态管理。 使用 useReducer 状态逻辑复杂。涉及多个子状态或多种状态更新逻辑。需要更好…...
Linux 定时任务详解:全面掌握 cron 和 at 命令
Linux 定时任务详解:全面掌握 cron 和 at 命令 Linux 系统中定时任务的管理对于运维和开发人员来说都是至关重要的。通过定时任务,可以在特定时间自动执行脚本或命令,提高系统自动化程度。本文将详细介绍 Linux 中常用的定时任务管理工具 cr…...
力扣考研经典题 反转链表
核心思想 头插法: 不断的将cur指针所指向的节点放到头节点之前,然后头节点指向cur节点,因为最后返回的是head.next 。 解题思路 1.如果头节点是空的,或者是只有一个节点,只需要返回head节点即可。 if (head null …...
opencv 设置超时时间
经常爬视频数据,然后用opencv做成图片 因此设置超时时间很重要 cap.set(cv2.CAP_PROP_FPS, timeout_ms) for idx, row in data.iterrows(): if idx < 400: continue try: # 打开视频文件 timeout_ms 5000 cap cv2.VideoCapture(row[PLAY_URL]) cap.set(cv2.C…...
2024年7月6日随笔
期末考试全部结束了,这个月是真累啊,一堆事,好在都熬过来了,上次参加的那个码题杯自己居然进国赛了,我看了一下职业赛道和本科赛道的题,本科赛道的感觉要难上不少,比赛时间是一周后,…...
Ubuntu 打开或关闭界面
设置开机默认关闭图形界面 1. 设置系统默认启动到多用户目标(命令行界面): o 使用以下命令将系统默认启动目标设置为多用户目标(这会关闭图形界面): sudo systemctl set-default multi-use…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
