Python异常处理:从入门到精通的实用指南
Langchain系列文章目录
01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南
02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖
03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南
04-玩转 LangChain:从文档加载到高效问答系统构建的全程实战
05-玩转 LangChain:深度评估问答系统的三种高效方法(示例生成、手动评估与LLM辅助评估)
06-从 0 到 1 掌握 LangChain Agents:自定义工具 + LLM 打造智能工作流!
python系列文章目录
01-Python 基础语法入门:从变量到输入输出,零基础也能学会!
02-Python 流程控制终极指南:if-else 和 for-while深度解析
03-Python 列表与元组全攻略:从新手到高手的必备指南
04-Python 字典与集合:从入门到精通的全面解析
05-Python函数入门指南:从定义到应用
06-Python 函数高级特性:从默认参数到闭包的全面解析
07-Python 模块与包:从零到自定义的全面指南
08-Python异常处理:从入门到精通的实用指南
文章目录
- Langchain系列文章目录
- python系列文章目录
- 前言
- 一、异常的概念与常见类型
- 1.1 异常是什么
- 1.1.1 异常的实际意义
- 1.1.2 为什么需要异常处理
- 1.2 常见的异常类型
- 1.2.1 示例代码:常见异常
- 1.2.2 应用场景
- 二、try-except语句的使用
- 2.1 try-except基本用法
- 2.1.1 示例代码:捕获单一异常
- 2.1.2 应用场景
- 2.2 捕获多个异常
- 2.2.1 示例代码:多异常处理
- 2.2.2 注意事项
- 2.2.3 进阶用法:获取异常信息
- 三、自定义异常
- 3.1 如何创建自定义异常
- 3.1.1 示例代码:简单自定义异常
- 3.1.2 进阶示例:带参数的自定义异常
- 3.2 自定义异常的优势
- 3.2.1 应用场景
- 3.2.2 注意事项
- 四、总结
前言
在Python编程中,异常处理是提升代码健壮性和用户体验的关键技能。无论是初学者还是进阶开发者,掌握异常处理都能让你的程序在面对错误时从容应对,而不是直接崩溃。本文将从基础入手,详细讲解异常的概念、try-except语句的用法以及自定义异常的创建,帮助你构建系统的知识体系,提升代码质量。
无论你是想快速上手异常处理,还是希望深入探索其高级应用,这篇文章都能满足你的需求。通过通俗易懂的语言、清晰的代码示例和实际案例,你将学会如何让代码更可靠、更专业。
一、异常的概念与常见类型
异常是Python程序运行时遇到的错误或意外情况。理解异常的本质和常见类型,是掌握异常处理的第一步。
1.1 异常是什么
异常是指程序在执行过程中遇到的非正常情况,会打断代码的正常运行。Python通过内置的异常类来表示这些错误,比如除以零、文件找不到等。
1.1.1 异常的实际意义
异常处理的核心目标是让程序在出错时不崩溃,而是优雅地处理问题。例如,当读取文件失败时,可以提示用户检查路径,而不是让程序直接终止。
1.1.2 为什么需要异常处理
- 提升稳定性:避免程序因小错误而崩溃。
- 改善用户体验:提供友好的错误提示。
- 便于调试:通过异常信息快速定位问题。
1.2 常见的异常类型
Python内置了许多异常类,以下是初学者和开发者最常遇到的几种:
| 异常类型 | 描述 | 示例场景 |
|---|---|---|
| SyntaxError | 语法错误 | 代码缩进错误或拼写错误 |
| NameError | 变量未定义 | 使用未声明的变量 |
| TypeError | 类型错误 | 将字符串与整数相加 |
| ValueError | 值错误 | 将“abc”转为整数 |
| FileNotFoundError | 文件未找到 | 试图打开不存在的文件 |
1.2.1 示例代码:常见异常
# NameError 示例
print(undefined_variable) # 输出:NameError: name 'undefined_variable' is not defined # TypeError 示例
result = "123" + 456 # 输出:TypeError: can only concatenate str (not "int") to str # ValueError 示例
num = int("abc") # 输出:ValueError: invalid literal for int() with base 10: 'abc'
1.2.2 应用场景
了解这些异常类型能帮助你在写代码时提前预防问题,并在后续异常处理中准确捕获特定错误。例如,处理用户输入时,可能需要特别关注ValueError。
二、try-except语句的使用
try-except是Python中最基础、最常用的异常处理工具。它允许你在代码出错时执行备用方案,而不是让程序崩溃。
2.1 try-except基本用法
基本语法如下:
try: # 可能出错的代码
except 异常类型: # 处理异常的代码
2.1.1 示例代码:捕获单一异常
try: result = 10 / 0 # 除以零会触发异常
except ZeroDivisionError: print("错误:除数不能为零!")
# 输出:错误:除数不能为零!
这里,try块尝试执行除法操作,当发生ZeroDivisionError时,程序跳转到except块打印提示信息。
2.1.2 应用场景
try-except特别适合保护容易出错的操作,比如:
- 文件读写(防止文件不存在)。
- 网络请求(处理连接失败)。
- 用户输入(避免无效数据)。
2.2 捕获多个异常
有时需要处理多种可能的异常,可以在一个except中捕获多个异常,或使用多个except分支。
2.2.1 示例代码:多异常处理
try: num = int(input("请输入一个数字:")) result = 10 / num
except ValueError: print("错误:请输入有效的数字!")
except ZeroDivisionError: print("错误:除数不能为零!")
2.2.2 注意事项
- 捕获顺序:先捕获具体的异常(如
ValueError),再捕获广义的异常(如Exception)。 - 避免过度捕获:不要用
except Exception捕获所有异常,这样可能隐藏严重问题。
2.2.3 进阶用法:获取异常信息
可以用as关键字获取异常的详细信息:
try: file = open("nonexistent.txt", "r")
except FileNotFoundError as e: print(f"文件错误:{e}")
# 输出:文件错误:[Errno 2] No such file or directory: 'nonexistent.txt'
三、自定义异常
当内置异常无法满足特定需求时,可以创建自定义异常,让代码更具可读性和针对性。
3.1 如何创建自定义异常
自定义异常通常继承自Exception类,并可以添加特定逻辑。
3.1.1 示例代码:简单自定义异常
class MyCustomError(Exception): pass try: age = -1 if age < 0: raise MyCustomError("年龄不能为负数!")
except MyCustomError as e: print(e)
# 输出:年龄不能为负数!
3.1.2 进阶示例:带参数的自定义异常
class StockError(Exception): def __init__(self, item, stock): self.item = item self.stock = stock self.message = f"{item} 库存不足,仅剩 {stock} 件" super().__init__(self.message) try: stock = 5 if stock < 10: raise StockError("手机", stock)
except StockError as e: print(e)
# 输出:手机 库存不足,仅剩 5 件
3.2 自定义异常的优势
- 清晰表达意图:异常名称直接反映错误类型(如
StockError)。 - 便于维护:集中管理特定业务逻辑的错误。
- 增强扩展性:可以添加额外属性或方法。
3.2.1 应用场景
自定义异常在以下场景特别有用:
- 用户认证(
AuthenticationError)。 - 业务逻辑校验(
InsufficientFundsError)。 - 数据验证(
InvalidInputError)。
3.2.2 注意事项
- 保持异常类简单,避免过度复杂化。
- 异常信息要具体,便于排查问题。
四、总结
本文从基础到进阶,全面讲解了Python异常处理的核心内容:
- 异常的概念与类型:理解异常本质,熟悉常见错误。
- try-except用法:掌握异常捕获的基本和多异常处理技巧。
- 自定义异常:学会创建特定需求的异常类,提升代码表达力。
通过这些知识,你可以让代码在面对错误时更稳定、更专业。建议在实际项目中多实践,例如为文件操作添加异常处理,或为业务逻辑设计自定义异常。异常处理不仅是技术,更是编程思维的体现。
相关文章:
Python异常处理:从入门到精通的实用指南
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
【AVL树】—— 我与C++的不解之缘(二十三)
什么是AVL树? AVL树发明者是G. M. Adelson-Velsky和E. M. Landis两个前苏联科学家,他们在1962年论文《An algorithm for the organization of information》中发表了AVL树。AVL树是最先发明的自平衡二叉搜索树,说白了就是能够自己控制平衡结构…...
用大白话解释日志处理Log4j 是什么 有什么用 怎么用
Log4j是什么? Log4j就像程序的“黑匣子”,专门用来记录软件运行时的各种信息,比如哪里报错、性能如何、用户操作轨迹等。它是Java领域最常用的日志框架之一,可以灵活控制日志内容、输出位置(控制台、文件、数据库等&a…...
无人机遥控器的亮度 和 两个工作频率
工作频率 2.4000-2.4835 GHz , 5.725-5.850 GHz 1.这是一个无人机的遥控器的两个工作频率,为什么会有两个工作频率? 无人机的遥控器采用双频段设计(2.4GHz 和 5.8GHz),主要是为了解决以下问题并优化性…...
【Linux】命令行参数 | 环境变量(四)
目录 前言: 一、命令行参数: 1.main函数参数 2.为什么有它? 二、环境变量: 1.main函数第三个参数 2.查看shell本身环境变量 3.PATH环境变量 4.修改PATH环境变量配置文件 5.HOME环境变量 6.SHELL环境变量 7.PWD环境变…...
算法002——复写零
力扣——复写零点击即可跳转 这道题还是运用 双指针,我们从左往右开始,让 cur 0,dest 0,当我们循环时,会覆盖后面的值,所以从左到右无法实现,我们运用 从右到左的方式。 以示例一数组为例,从…...
例子 DQN + CartPole: 深入思考一下,强化学习确实是一场智能冒险之旅!
强化学习的概念 在技术人员眼里,深度学习、强化学习,或者是大模型,都只是一些算法。无论是简单,还是复杂,我们都是平静的看待。当商业元素日益渗透进技术领域,人人言必称大模型的时候。技术人该反思一下&a…...
java 实现xxl-job定时任务自动注册到调度中心
xxl-job 自动注册(执行器和任务) 前言 xxl-job是一个功能强大、简单易用、高可用且可扩展性强的分布式定时任务框架/分布式任务调度平台。它适用于各种需要定时任务调度的场景,并可根据业务需求进行灵活配置和扩展。 xxl-job简介 xxl-job是一个开源的分布式定时任务框架,…...
esp32串口通信
1、线路图 2、打开电脑的串口终端 3、eps32通过串口往电脑的串口终端输出信息: from machine import UART, Pin import time# 初始化UART0,波特率设置为115200 uart UART(0, baudrate115200, tx1, rx3)# 主循环 while True:# 要发送的消息#某些串口终…...
蓝桥杯备赛-前缀和-可获得的最小取值
问题描述 妮妮学姐手头有一个长度为 nn 的数组 aa,她想进行 kk 次操作来取出数组中的元素。每次操作必须选择以下两种操作之一: 取出数组中的最大元素。取出数组中的最小元素和次小元素。 妮妮学姐希望在进行完 kk 次操作后,取出的数的和最…...
UniApp 中封装 HTTP 请求与 Token 管理(附Demo)
目录 1. 基本知识2. Demo3. 拓展 1. 基本知识 从实战代码中学习,上述实战代码来源:芋道源码/yudao-mall-uniapp 该代码中,通过自定义 request 函数对 HTTP 请求进行了统一管理,并且结合了 Token 认证机制 请求封装原理ÿ…...
边缘计算+多模态感知:户外监控核心技术解析与工程部署实践!户外摄像头监控哪种好?户外摄像头监控十大品牌!格行视精灵VS海康威视VS大华横评!
一、核心参数解析与选型逻辑 1.环境适应性设计 极端天气防护:优先选择IP66/67防护等级的设备,例如格行视精灵通过IP67防水防尘设计可应对暴雨、沙尘暴等复杂环境,其密封轴承结构可有效防止水汽侵蚀内部电路。 温度耐受范围:北方…...
Spring项目-抽奖系统(实操项目)(ONE)
^__^ (oo)\______ (__)\ )\/\ ||----w | || || 一:前言: 随着互联网技术的快速发展,线上营销活动已成为企业吸引用户、…...
STM32-智能小车项目
项目框图 ST-link接线 实物图: 正面: 反面: 相关内容 使用L9110S电机模块 电机驱动模块L9110S详解 | 良许嵌入式 测速模块 语音模块SU-03T 网站:智能公元/AI产品零代码平台 一、让小车动起来 新建文件夹智能小车项目 在里面…...
Python:字符串常见操作
find(子字符串,开始位置下标,结束位置下标) 注意:开始位置和结束位置下标可以省略,表示在整个字符串中查找 stasdfghjkl print(st.find(a))#输出结果为0,表明a在第一个位置默认从零开始,找不到则返回-1 …...
Redis 哈希(Hash)
Redis 哈希(Hash) 概述 Redis 哈希(Hash)是一种特殊的键值对类型,它允许存储结构化的数据,例如一个对象或记录。每个哈希值可以包含多个字段,每个字段又可以存储一个字符串值。这使得Redis哈希非常适合用于存储对象的…...
Windows对比MacOS
Windows对比MacOS 文章目录 Windows对比MacOS1-环境变量1-Windows添加环境变量示例步骤 1:打开环境变量设置窗口步骤 2:添加系统环境变量 2-Mac 系统添加环境变量示例步骤 1:打开终端步骤 2:编辑环境变量配置文件步骤 3࿱…...
react 路由跳转的几种方式
在 React 中,路由跳转通常通过 react-router-dom(或类似的路由库)来实现。以下是几种常见的路由跳转方式: 1. 使用 <Link> 组件 <Link> 是最简单的路由跳转方式,它会生成一个 <a> 标签,…...
2.你有什么绝活儿?—Java能做什么?
1、Java的绝活儿:要问Java有什么绝活,我觉得它应该算是一位魔法师,会的绝活儿有很多,要说最能拿得出手的当属以下三个。 1.1 平台无关性:Java可以在任何地方施展魔法,无论是Windows、Linux还是Mac…...
2025年2月文章一览
2025年2月编程人总共更新了17篇文章: 1.2025年1月文章一览 2.《Operating System Concepts》阅读笔记:p2-p8 3.《Operating System Concepts》阅读笔记:p9-p12 4.《Operating System Concepts》阅读笔记:p13-p16 5.《Operati…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
