news 2026/3/28 11:09:57

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/3/28 8:30:27

还在被暴力破解困扰?Open-AutoGLM动态防御机制这样设计才安全

第一章&#xff1a;Open-AutoGLM 暴力破解防护优化在部署 Open-AutoGLM 这类基于大语言模型的自动化系统时&#xff0c;API 接口常面临高频恶意请求与暴力破解攻击。为保障服务稳定性与数据安全&#xff0c;需构建多层级防护机制&#xff0c;结合速率限制、行为分析与动态响应策…

作者头像 李华
网站建设 2026/3/23 23:49:36

LangFlow支持实时预览?这才是高效AI开发的关键!

LangFlow支持实时预览&#xff1f;这才是高效AI开发的关键&#xff01; 在构建智能问答系统、自动化客服或知识引擎的今天&#xff0c;开发者常常面临一个共同困境&#xff1a;明明思路清晰&#xff0c;却因为反复调试提示词、调整链式逻辑而卡在原型验证阶段。每次修改都要重新…

作者头像 李华
网站建设 2026/3/28 6:09:17

基于Spring Boot的问卷调查系统的设计与实现毕业设计源码

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于Spring Boot框架的问卷调查系统&#xff0c;以满足现代网络环境下数据收集、处理和分析的需求。具体研究目的如下&#xff1a;构建…

作者头像 李华
网站建设 2026/3/27 10:29:15

开题报告,你的“第一声心跳”:让宏智树AI为研究注入最初的生命力

清晨的图书馆&#xff0c;灯光驱散了夜的寒意&#xff0c;键盘敲击声此起彼伏。面对屏幕上仅有的“研究背景”四个字&#xff0c;那微小跳动的光标&#xff0c;仿佛在模仿着你内心因迷茫而紊乱的“第一声心跳”。你知道&#xff0c;一个坚实的研究&#xff0c;必须始于一次清晰…

作者头像 李华
网站建设 2026/3/27 14:08:44

LangFlow Strategy策略模式切换算法

LangFlow 策略模式切换机制深度解析 在大语言模型&#xff08;LLM&#xff09;应用开发日益普及的今天&#xff0c;如何快速构建、测试并迭代 AI 工作流&#xff0c;已成为团队效率的关键瓶颈。传统基于代码的开发方式虽然灵活&#xff0c;但对非技术人员门槛过高&#xff0c;…

作者头像 李华