Python编程实战:try...except...finally —— 让程序更稳健的异常处理机制

在软件开发中,我们无法预料所有运行时错误:文件可能不存在、网络连接可能中断、用户输入可能出错...... 为了让程序在异常情况下仍能优雅地运行,Python 提供了强大的异常处理机制 ------ try...except...finally。

本文将带你系统掌握 Python 的异常捕获与处理流程,并结合实例讲解 try、except、finally 的使用技巧与最佳实践。


一、为什么要用异常处理?

如果程序在运行过程中遇到错误而没有被处理,Python 会抛出异常并终止程序执行。 例如:

python 复制代码
print("开始计算...")
result = 10 / 0
print("结果:", result)

运行结果:

vbnet 复制代码
开始计算...
ZeroDivisionError: division by zero

程序在第二行报错,后续代码无法执行。 这时我们可以使用 try...except 来捕获错误,防止程序崩溃。


二、try...except 的基本语法

python 复制代码
try:
    # 可能发生异常的代码
    result = 10 / 0
except ZeroDivisionError:
    # 当发生 ZeroDivisionError 时执行
    print("除数不能为0!")

运行结果:

复制代码
除数不能为0!

程序不会中断,异常被优雅地处理。


三、多个 except 分支捕获不同异常

你可以使用多个 except 来分别处理不同类型的异常:

python 复制代码
try:
    num = int(input("请输入一个数字:"))
    result = 10 / num
except ValueError:
    print("输入的不是数字!")
except ZeroDivisionError:
    print("除数不能为0!")
except Exception as e:
    print("发生未知错误:", e)

✅ 优点:

  • 可根据错误类型定制不同提示;
  • Exception 可兜底捕获所有未明确声明的异常。

四、使用 finally 块 ------ 无论是否出错都执行

有时我们希望即使出错,也要执行某些操作(例如:关闭文件、释放资源、断开数据库连接等)。 这时就用 finally:

python 复制代码
try:
    f = open("data.txt", "r")
    content = f.read()
    print(content)
except FileNotFoundError:
    print("文件不存在!")
finally:
    f.close()
    print("文件已关闭。")

即使文件不存在导致异常,finally 也会始终执行。


五、try...except...else 的组合用法

else 块可与 try 一起使用,表示"没有发生异常时执行":

python 复制代码
try:
    num = int(input("请输入数字:"))
except ValueError:
    print("输入错误!")
else:
    print(f"你输入的数字是 {num}")

执行顺序如下:

语句块 是否执行条件
try 总是执行
except 发生异常时执行
else 未发生异常时执行
finally 总是执行(无论是否异常)

六、嵌套的 try 语句

在实际开发中,try 块可以嵌套使用:

python 复制代码
try:
    f = open("data.txt", "r")
    try:
        content = f.read()
        print(content)
    except UnicodeDecodeError:
        print("文件编码错误!")
    finally:
        f.close()
        print("文件已关闭。")
except FileNotFoundError:
    print("文件不存在!")

这种结构可在多层操作中,分别处理不同阶段的异常。


七、raise 主动抛出异常

有时我们希望手动触发异常来提醒调用者。例如:

python 复制代码
def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为0!")
    return a / b

try:
    print(divide(10, 0))
except ValueError as e:
    print("错误:", e)

输出:

复制代码
错误: 除数不能为0!

八、实战案例:文件读取与异常处理

下面是一个更接近真实项目的示例:

python 复制代码
def read_file(filename):
    try:
        f = open(filename, "r", encoding="utf-8")
    except FileNotFoundError:
        print("❌ 文件不存在,请检查路径。")
    else:
        print("✅ 文件读取成功:")
        print(f.read())
    finally:
        try:
            f.close()
            print("📁 文件已关闭。")
        except:
            print("⚠️ 无法关闭文件(可能未成功打开)。")

read_file("example.txt")

这个示例展示了一个完整的异常处理结构:

  • 使用 try...except 捕获文件打开错误;
  • 用 else 处理正常逻辑;
  • 在 finally 中确保资源释放。

九、总结与最佳实践

关键点 建议
✅ try...except 捕获已知错误,避免程序崩溃
✅ finally 用于清理资源(文件、网络连接等)
✅ else 仅在无异常时执行逻辑
⚠️ except Exception 谨慎使用,避免掩盖错误
⚙️ raise 主动抛出错误,增强函数健壮性

✨ 结语

try...except...finally 是 Python 异常处理体系的核心,它能让你的程序在面对错误时不慌乱、不崩溃、可控可恢复。 掌握它,你就能写出更加健壮、安全、可维护的 Python 程序。


相关推荐
风早爽太10 分钟前
Python 开发笔记:配置生产环境中 Celery Worker 的独立进程启动方式
python·fastapi
打工仔折腾 AI23 分钟前
飞牛OS上用Docker Compose部署ExerciseDiary运动记录并配置远程访问
运维·人工智能·后端·python·docker·容器·ai agent 实战
小蒜学长36 分钟前
基于Python的动物救助站管理系统的设计与实现(代码+数据库+LW)
数据库·后端·python·django·动物救助
小小张说故事1 小时前
Python 中 __new__ 和 __init__ 到底谁才是构造函数?一文讲透区别与 5 个坑
后端·python
言乐61 小时前
Python实现关税自动计算模型
开发语言·python·django·virtualenv·pygame
伞伞悦读1 小时前
从零打通 Hermes Agent:Windows + WSL2 + Clash 全链路安装、认证与首次实战
python·语言模型
用户847172102841 小时前
.shot 文件格式规范
前端·后端
happylifetree1 小时前
Python17:核心语法-数据存储与运算-输入与输出
python
梅雅达编程笔记1 小时前
04-Python CSV数据保存与翻页抓取
开发语言·爬虫·python·pandas·数据采集·csv
估值探索者2 小时前
【Python量化策略实战 #04】Donchian 通道假突破太多?用 ATR 阈值过滤跑通真实突破信号
开发语言·python·接口·api接口·数据api接口·股票数据api接口