news 2026/6/15 10:24:32

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/6/15 6:25:36

基于Spring Boot的企业来访管理平台毕业设计

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在构建一个基于Spring Boot的企业来访管理平台&#xff0c;以满足现代企业对于来访人员管理的高效、便捷和安全的需求。具体研究目的如下&#xff1a; 首…

作者头像 李华
网站建设 2026/6/15 5:03:38

【限时参考】Open-AutoGLM多因素认证配置模板泄露,速领!

第一章&#xff1a;Open-AutoGLM 多因素认证集成在现代身份验证架构中&#xff0c;Open-AutoGLM 通过灵活的插件机制支持多因素认证&#xff08;MFA&#xff09;&#xff0c;有效提升系统安全性。该框架允许开发者将多种认证方式无缝集成至现有登录流程&#xff0c;包括基于时间…

作者头像 李华
网站建设 2026/6/15 6:32:13

‌行为驱动开发(BDD)在跨职能团队中的实践:测试从业者的指南

BDD为何对测试至关重要‌行为驱动开发&#xff08;Behavior-Driven Development&#xff0c;BDD&#xff09;作为一种敏捷实践&#xff0c;已从开发领域延伸至整个软件生命周期&#xff0c;尤其对测试从业者具有革命性意义。它通过“实例化需求”和“共同语言”打破部门墙&…

作者头像 李华
网站建设 2026/6/15 2:37:32

9款AI写论文哪个好?2025期末大逃杀,谁是你的“学术诺亚方舟”?

当毕业季的焦虑如潮水般涌来&#xff0c;9艘标榜“智能写作”的方舟同时驶向你&#xff0c;但只有一艘能真正载你穿越“文献虚构”与“学术失格”的惊涛骇浪&#xff0c;安全抵达彼岸。 深夜&#xff0c;图书馆的灯光下&#xff0c;一位毕业生正绝望地核对AI为他生成的参考文献…

作者头像 李华
网站建设 2026/6/15 9:04:02

LangFlow Flyweight享元模式节省内存开销

LangFlow 中的享元模式&#xff1a;如何用设计智慧降低内存开销 在构建AI工作流的今天&#xff0c;开发者面对的不再是简单的函数调用&#xff0c;而是一张张由提示词、模型、检索器和记忆模块交织而成的复杂网络。LangChain 让这一切成为可能&#xff0c;但直接编码实现这些流…

作者头像 李华
网站建设 2026/6/15 12:18:52

SLAM的中的可观和现代控制理论里面的可观一样吗?

问题描述&#xff1a;SLAM的中的可观和现代控制理论里面的可观一样吗&#xff1f;问题解答&#xff1a;四、你论文里看到的“退化”&#xff0c;翻译成控制语言就是&#xff1a;SLAM 术语控制理论术语退化&#xff08;degeneration&#xff09;不可观 / 部分不可观几何退化输出…

作者头像 李华