news 2026/4/17 16:00:55

Python 异常处理完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 异常处理完全指南

Python 的异常处理是保障程序健壮性的核心机制,用于捕获和处理程序运行时的错误(如除零、文件不存在、类型不匹配等),避免程序直接崩溃。本文将从异常的基本概念、核心语法、高级用法到最佳实践全面讲解 Python 异常处理。

一、异常的基本概念

1. 什么是异常?

异常是 Python 程序运行时发生的错误事件(如语法错误是编译时错误,不属于异常),当异常发生时,Python 会生成一个异常对象,包含错误类型、原因和堆栈信息。如果程序没有处理这个异常,会导致程序终止并抛出Traceback(回溯)

2. Python 内置常见异常类型

异常类型说明
SyntaxError语法错误(编译时错误,非运行时异常)
ZeroDivisionError除零错误
TypeError类型不匹配(如字符串与数字相加)
ValueError值错误(如 int ("abc"))
IndexError索引越界(如列表访问不存在的索引)
KeyError字典键不存在
FileNotFoundError文件不存在
AttributeError对象属性不存在
NameError变量名未定义
IOError输入 / 输出错误(如文件读写失败)
Exception所有内置异常的基类(通用异常)

二、异常处理的核心语法

Python 通过try-except语句处理异常,还可配合elsefinallyraise等关键字实现更灵活的处理逻辑。

1. 基础结构:try-except

作用:包裹可能抛出异常的代码,捕获并处理指定类型的异常。

语法:
try: # 可能发生异常的代码块 risky_code() except 异常类型1 as e: # 处理异常类型1的逻辑 print(f"异常类型1:{e}") except 异常类型2 as e: # 处理异常类型2的逻辑 print(f"异常类型2:{e}")

2. 处理多个异常

方式 1:多个except子句(推荐,针对性处理)
try: num = int(input("请输入数字:")) res = 10 / num print(f"结果:{res}") except ValueError as e: print(f"值错误:请输入有效的整数({e})") except ZeroDivisionError as e: print(f"除零错误:不能输入0({e})")
方式 2:元组形式捕获多个异常

适用于多个异常的处理逻辑相同的场景:

try: num = int(input("请输入数字:")) res = 10 / num except (ValueError, ZeroDivisionError) as e: print(f"输入错误:{e}")
方式 3:捕获通用异常(Exception

捕获所有内置异常(不推荐直接使用,易掩盖未知错误):

try: num = int(input("请输入数字:")) res = 10 / num except Exception as e: print(f"发生未知错误:{e}") # 捕获所有异常

3.else子句:无异常时执行

作用:如果try代码块中没有发生异常,会执行else子句的代码(可选)。

try: num = int(input("请输入数字:")) res = 10 / num except (ValueError, ZeroDivisionError) as e: print(f"错误:{e}") else: print(f"计算成功,结果为:{res}") # 仅当无异常时执行

4.finally子句:无论是否异常都执行

作用:用于释放资源(如文件、数据库连接、网络连接),无论try块是否发生异常,finally都会执行

示例:文件操作中的资源释放
try: f = open("test.txt", "r", encoding="utf-8") content = f.read() print(content) except FileNotFoundError as e: print(f"文件不存在:{e}") finally: # 确保文件句柄被关闭 if 'f' in locals(): f.close() print("文件已关闭")

5.raise:主动抛出异常

作用:手动触发异常,适用于业务逻辑中的错误检查(如参数校验)。

基本用法:
def check_age(age): if age < 0 or age > 120: # 主动抛出ValueError raise ValueError(f"年龄无效:{age}(必须在0-120之间)") print(f"年龄为:{age}") try: check_age(-5) except ValueError as e: print(f"捕获异常:{e}") # 输出:捕获异常:年龄无效:-5(必须在0-120之间)

三、总结

Python 异常处理的核心是通过try-except捕获错误,用finally释放资源,用raise主动触发异常,关键在于:

  1. 精准捕获:优先处理具体异常,避免通用捕获;
  2. 资源安全:用with语句替代手动资源释放;
  3. 信息明确:记录详细的异常信息,便于调试;
  4. 合理使用:异常处理用于意外错误,而非流程控制。

通过合理的异常处理,可大幅提升程序的健壮性和可维护性,让程序在面对错误时更 “优雅”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/5 19:56:10

LangFlow镜像 vs 手写代码:谁更适合快速迭代AI产品?

LangFlow镜像 vs 手写代码&#xff1a;谁更适合快速迭代AI产品&#xff1f; 在一家初创公司会议室里&#xff0c;产品经理拿着一份模糊的需求文档对技术团队说&#xff1a;“我们想做个能自动写营销文案的AI助手&#xff0c;下周能出个原型吗&#xff1f;” 如果是几年前&#…

作者头像 李华
网站建设 2026/4/18 8:46:59

【力量之源】愿力>心力>业力>能力>努力 分别指什么? 你想成为什么远比你今天干了多少活 重要的多!!!

人是万物之灵多想想 你想成为什么远比你今天干了多少活 重要的多 许个愿吧 meaning 内心的愿望、志向或目标所产生的推动力&#xff0c;具有强大的精神力量&#xff0c;能够引导人不断前行&#xff0c;克服困难&#xff0c;实现目标。 心诚则灵&#xff0c;有多大的意愿之力&am…

作者头像 李华
网站建设 2026/4/18 8:15:50

LangFlow图形化界面重磅上线,快速构建大模型AI工作流

LangFlow图形化界面重磅上线&#xff0c;快速构建大模型AI工作流 在大语言模型&#xff08;LLM&#xff09;正以前所未有的速度重塑人工智能应用格局的今天&#xff0c;一个现实问题始终困扰着开发者&#xff1a;如何高效地将复杂的AI逻辑从构想变为可运行的系统&#xff1f;传…

作者头像 李华
网站建设 2026/4/18 8:55:05

【Open-AutoGLM电商自动化秘籍】:3步实现优惠券智能发放,转化率提升70%+

第一章&#xff1a;Open-AutoGLM电商优惠券发放自动化概述在现代电商平台中&#xff0c;精准、高效的营销策略是提升用户转化率的关键。优惠券作为最常见的促销手段之一&#xff0c;其发放过程的自动化与智能化直接影响运营效率和用户体验。Open-AutoGLM 是一款基于大语言模型&…

作者头像 李华
网站建设 2026/4/18 8:51:23

视觉微调的终极答案?5%参数+即插即用,一篇看懂如何吊打传统方法!

模型高效微调的N种方式 许多出色的 CV 研究通过预训练与全参微调在不断突破视觉任务的极限。但随着模型参数迈向亿级&#xff0c;全参数微调仍然是最佳的视觉任务微调方式吗&#xff1f; 全参微调的做法是解冻模型所有参数&#xff0c;用新数据重新训练。这就会遇到以下三大困…

作者头像 李华