news 2026/5/19 17:31:12

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/5/12 20:51:38

springboot中小型医院网站(11546)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/5/17 0:27:44

【建议收藏】大模型技术生态分层详解:从基础到应用,全方位掌握大模型开发技术

本文系统解析大模型技术生态六层架构&#xff0c;涵盖基础模型原理、主流模型清单、高效推理框架、微调优化技术、开发工具链及垂直行业解决方案。从闭源开源模型对比到实际应用开发&#xff0c;提供从理论到实践的全景式技术指南&#xff0c;助力开发者快速掌握大模型开发体系…

作者头像 李华
网站建设 2026/5/18 13:02:51

基于Spring Boot的在线学习系统的设计与实现毕设

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于Spring Boot框架的在线学习系统&#xff0c;以满足现代教育环境中学习者对灵活、高效和个性化学习体验的需求。具体而言&#xff0…

作者头像 李华
网站建设 2026/5/16 16:11:29

Open-AutoGLM安全加固全攻略,20年安全专家教你构筑零信任防线

第一章&#xff1a;Open-AutoGLM安全加固核心理念在构建和部署大型语言模型系统时&#xff0c;Open-AutoGLM的安全加固设计以“最小信任面、全程可验证、动态防御”为核心原则。该理念强调从模型推理、数据流转到接口调用的每一环节均需具备可控性和可审计性&#xff0c;确保系…

作者头像 李华
网站建设 2026/5/18 18:43:14

9款AI写论文工具终极测评:宏智树AI凭何成为毕业季“学术救星”?

当毕业季的倒计时与论文DDL双重压迫&#xff0c;9款AI写作工具的宣传页如雪花般涌来——但哪款才是真正能帮你“从选题到答辩”一站式通关的利器&#xff1f;我们实测了包括宏智树AI在内的9款主流工具&#xff0c;发现80%的AI只能生成“车轱辘话”&#xff0c;而宏智树AI却以“…

作者头像 李华