news 2026/9/17 11:02:18

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/9/17 0:31:55

鸿蒙前端开发,零基础入门到精通,收藏这篇就够了

1. 概述 1.1 简介 鸿蒙&#xff08;即 HarmonyOS &#xff0c;开发代号 Ark&#xff0c;正式名称为华为终端鸿蒙智能设备操作系统软件&#xff09;是华为公司自 2012 年以来开发的一款可支持鸿蒙原生应用和兼容 AOSP 应用的分布式操作系统。该系统利用“分布式”技术将手机、…

作者头像 李华
网站建设 2026/9/16 14:58:10

vscode怎么启动前端项目,零基础入门到精通,收藏这篇就够了

第一步:学会nvm管理多个node windox 安装node 两个版本&#xff08;nvm 实现&#xff09;-CSDN博客 第二步:配置运行环境,参考项目ReadMe说明文档(不一定适合你的项目) ###### 安装 fnm (快速 Node 管理器) winget install Schniz.fnm###### 配置 fnm 环境 fnm env --use-on-…

作者头像 李华
网站建设 2026/9/17 10:06:58

一文搞懂:AI Agent 八大核心概念(小白程序员收藏版)

在大模型技术飞速发展的今天&#xff0c;AI Agent 早已不是晦涩的学术概念&#xff0c;而是逐渐渗透到智能客服、自动化办公、智能制造等领域的“数字员工”。对于刚入门的小白或想要拓展技术边界的程序员来说&#xff0c;掌握 AI Agent 的核心概念是解锁其应用能力的关键。本文…

作者头像 李华
网站建设 2026/9/16 6:03:35

收藏!大龄程序员转型难在哪?4大核心痛点拆解+破局方向

之前在《大龄程序员的未来在何方》一文中&#xff0c;我们乐观探讨了程序员保持职场竞争力的多个方向&#xff0c;但现实往往更显骨感&#xff1a;不少程序员最终不得不告别深耕多年的软件开发领域&#xff0c;转向其他职业赛道。 真正踏上转型之路才会深切体会&#xff1a;这…

作者头像 李华
网站建设 2026/9/17 7:19:21

9款AI写论文哪个好?实测对比后,只有宏智树AI能一键生成带真实数据图表+知网可查文献的毕业论文

期末季的深夜&#xff0c;书桌上堆着文献打印稿、咖啡杯底结了层渍&#xff0c;而你的论文进度条还卡在“开题”——别焦虑&#xff0c;你不是一个人。如今市面上AI写论文工具层出不穷&#xff0c;但真正能帮你安全、高效、合规地完成一篇可提交、可答辩、可查重的毕业论文的&a…

作者头像 李华