当前位置: 首页 > news >正文

️ Python异常处理完全指南:从try-except到自定义异常

🛡️ Python异常处理完全指南:从try-except到自定义异常

在Python编程中,异常处理是写出健壮代码的关键技能。本文将带你深入了解Python的异常处理机制,从基础的try-except到自定义异常,让你的程序更加稳定和可靠。


📌 什么是异常?

异常(Exception)是程序执行过程中发生的错误事件,会中断程序的正常流程。Python使用异常对象来表示各种错误情况,如除以零、文件不存在、索引越界等。


🔧 基础语法:try-except

最基本的异常处理结构是try-except语句:

try:result = 10 / 0
except ZeroDivisionError:print("不能除以零!")

📋 捕获多种异常

可以捕获多种不同类型的异常:

try:number = int(input("请输入一个数字:"))result = 100 / number
except ValueError:print("输入无效!请输入数字。")
except ZeroDivisionError:print("不能除以零!")

🔍 获取异常信息

使用as关键字可以获取异常对象,查看详细信息:

try:file = open("不存在的文件.txt", "r")
except FileNotFoundError as e:print(f"错误信息:{e}")print(f"错误类型:{type(e).__name__}")

⚡ else 和 finally

else块在没有异常时执行,finally块无论是否发生异常都会执行:

try:file = open("data.txt", "r")content = file.read()
except FileNotFoundError:print("文件未找到")
else:print(f"文件内容:{content}")
finally:print("清理工作完成")if 'file' in locals():file.close()

🎯 捕获所有异常

使用Exception可以捕获大部分异常(但不建议滥用):

try:# 可能出错的代码risky_operation()
except Exception as e:print(f"发生错误:{e}")# 记录日志或进行其他处理

🚀 raise 主动抛出异常

使用raise可以主动抛出异常:

def check_age(age):if age < 0:raise ValueError("年龄不能为负数")if age > 150:raise ValueError("年龄不现实")return agetry:check_age(-5)
except ValueError as e:print(f"验证失败:{e}")

🎨 自定义异常

通过继承Exception类创建自定义异常:

class ValidationError(Exception):"""数据验证错误"""passclass InsufficientFundsError(Exception):"""余额不足错误"""def __init__(self, balance, amount):self.balance = balanceself.amount = amountsuper().__init__(f"余额 {balance} 不足,需要 {amount}")# 使用自定义异常
class BankAccount:def __init__(self, balance=0):self.balance = balancedef withdraw(self, amount):if amount > self.balance:raise InsufficientFundsError(self.balance, amount)self.balance -= amountreturn self.balance# 测试
account = BankAccount(100)
try:account.withdraw(200)
except InsufficientFundsError as e:print(f"取款失败:{e}")print(f"当前余额:{e.balance}")print(f"请求金额:{e.amount}")

🔗 异常链

使用raise from可以在转换异常时保留原始异常信息:

def parse_config(data):try:return json.loads(data)except json.JSONDecodeError as e:raise ConfigError("配置文件格式错误") from e# 这样可以看到完整的异常链

📝 最佳实践

  1. 精确捕获:尽量捕获具体的异常类型,而不是泛泛的Exception
  2. 不要静默处理:空的except块会隐藏问题,至少要记录日志
  3. 使用finally释放资源:或使用上下文管理器(with语句)
  4. 异常信息要清晰:自定义异常时提供有用的错误信息
  5. 不要滥用异常:异常是用于错误处理,不是流程控制

🎁 上下文管理器与异常

with语句自动处理资源释放,即使在异常情况下:

# 不需要手动关闭文件,with会自动处理
with open("data.txt", "r") as file:content = file.read()# 即使这里发生异常,文件也会被正确关闭

🎯 总结

Python的异常处理机制提供了强大而灵活的错误处理能力:

  • try-except:捕获和处理异常
  • else:无异常时执行的代码
  • finally:无论是否异常都执行的清理代码
  • raise:主动抛出异常
  • 自定义异常:创建特定领域的错误类型

掌握异常处理,让你的Python程序更加健壮和专业!💪


本文内容部分由AI辅助生成,经人工审核整理。

http://www.jsqmd.com/news/521548/

相关文章:

  • RF24Network嵌入式无线多跳网络协议栈深度解析
  • hot100--矩阵
  • Memgraph未来路线图:图数据库技术发展趋势与创新方向
  • FlowState Lab硬件资源优化:在有限GPU显存下的部署与推理技巧
  • 如何快速实现MongoDB实时数据同步:mongo-connector完整指南
  • Qwen3-TTS开源语音模型实操指南:GPU低延迟流式合成保姆级教程
  • PAJ7620U2手势识别芯片嵌入式驱动开发实战
  • GHelper:华硕笔记本用户的轻量级硬件控制解决方案
  • 10个fast-agent工作流模式实战:Chain、Parallel、Router完整教程
  • Local AI MusicGen作品集:8-bit游戏音乐生成成果展示
  • 5个技巧让Klipper固件发挥你的3D打印机最大潜力
  • 从原理到应用:寄存器二分频电路在FPGA设计中的5种实际场景
  • CLIP-GmP-ViT-L-14精彩案例:时尚穿搭图-风格关键词(‘Y2K’‘极简’)匹配效果
  • VideoAgentTrek-ScreenFilter模型解释性研究:可视化AI决策过程增强信任
  • Qwen3-ASR-1.7B模型在TokenPocket钱包中的语音安全验证
  • EasyAnimateV5-7b-zh-InP在Linux环境下的高性能部署方案
  • Super Qwen Voice World实现卷积神经网络语音可视化工具
  • 从“技术驱动”到“业务驱动”:衡石如何帮助企业构建业务导向的数据文化
  • [特殊字符] mPLUG-Owl3-2B效果展示:从‘图中有什么’到‘推断拍摄时间与天气’的进阶推理
  • OpenClaw硬件控制:Qwen3-32B通过HomeAssistant管理智能家居
  • 5个实战技巧深度解析:如何高效使用docxtemplater进行专业文档生成
  • Alpamayo-R1-10B环境部署:32GB内存+30GB存储+CUDA驱动全检查清单
  • 告别复杂配置:cv_unet_image-colorization黑白照片修复工具快速入门教程
  • cv_resnet50_face-reconstruction部署教程:适配国产昇腾NPU的PyTorch 2.5迁移实践
  • Vault-AI多语言支持:国际化与本地化配置完全教程
  • 音频转LRC字幕:让多语言内容创作变得高效精准
  • NX二次开发-移除参数,删除所有实体参数,移除所有实体参数代码
  • Guohua Diffusion极简交互设计:隐藏复杂参数,新手友好绘画生成
  • 【医疗器械软件合规生死线】:为什么92%的C代码在ISO 13485审核中因3个隐性缺陷被拒?
  • StructBERT零样本分类-中文-base服务监控:Prometheus+Grafana指标采集配置