GZ穿越火线正版
1.13G · 2025-11-18
本文将带你系统掌握 Python 的异常捕获与处理流程,并结合实例讲解 try、except、finally 的使用技巧与最佳实践。
如果程序在运行过程中遇到错误而没有被处理,Python 会抛出异常并终止程序执行。 例如:
print("开始计算...")
result = 10 / 0
print("结果:", result)
运行结果:
开始计算...
ZeroDivisionError: division by zero
程序在第二行报错,后续代码无法执行。
这时我们可以使用 try...except 来捕获错误,防止程序崩溃。
try:
# 可能发生异常的代码
result = 10 / 0
except ZeroDivisionError:
# 当发生 ZeroDivisionError 时执行
print("除数不能为0!")
运行结果:
除数不能为0!
程序不会中断,异常被优雅地处理。
你可以使用多个 except 来分别处理不同类型的异常:
try:
num = int(input("请输入一个数字:"))
result = 10 / num
except ValueError:
print("输入的不是数字!")
except ZeroDivisionError:
print("除数不能为0!")
except Exception as e:
print("发生未知错误:", e)
优点:
Exception 可兜底捕获所有未明确声明的异常。有时我们希望即使出错,也要执行某些操作(例如:关闭文件、释放资源、断开数据库连接等)。
这时就用 finally:
try:
f = open("data.txt", "r")
content = f.read()
print(content)
except FileNotFoundError:
print("文件不存在!")
finally:
f.close()
print("文件已关闭。")
即使文件不存在导致异常,finally 也会始终执行。
else 块可与 try 一起使用,表示“没有发生异常时执行”:
try:
num = int(input("请输入数字:"))
except ValueError:
print("输入错误!")
else:
print(f"你输入的数字是 {num}")
执行顺序如下:
| 语句块 | 是否执行条件 |
|---|---|
| try | 总是执行 |
| except | 发生异常时执行 |
| else | 未发生异常时执行 |
| finally | 总是执行(无论是否异常) |
在实际开发中,try 块可以嵌套使用:
try:
f = open("data.txt", "r")
try:
content = f.read()
print(content)
except UnicodeDecodeError:
print("文件编码错误!")
finally:
f.close()
print("文件已关闭。")
except FileNotFoundError:
print("文件不存在!")
这种结构可在多层操作中,分别处理不同阶段的异常。
有时我们希望手动触发异常来提醒调用者。例如:
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!
下面是一个更接近真实项目的示例:
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 程序。