本文目录导读:

- 案例1:正常执行 + finally
- 案例2:发生异常 + finally
- 案例3:try 块中有 return + finally
- 案例4:嵌套 try-finally
- 案例5:finally 中的 return 覆盖原有 return
- 唯一不执行的情况
- 实际应用场景:资源清理
在Python中,finally 子句一定会执行,无论 try 块中是否发生异常,或者是否使用了 return、break、continue 等语句,但有一个极少数例外:程序被强制终止(如 os._exit()、系统崩溃、电源断电)。
以下是几个典型案例,展示 finally 的最终执行特性:
案例1:正常执行 + finally
def demo_normal():
try:
print("1. 正在执行 try 块")
result = 10 / 2 # 正常运算
print("2. 运算完成")
except ZeroDivisionError:
print("捕获到除零异常")
finally:
print("3. **finally 块始终执行**")
print("4. 函数结束")
demo_normal()
# 输出:
# 1. 正在执行 try 块
# 2. 运算完成
# 3. **finally 块始终执行**
# 4. 函数结束
案例2:发生异常 + finally
def demo_exception():
try:
print("1. 正在执行 try 块")
result = 10 / 0 # 触发异常
print("2. 这行不会执行")
except ZeroDivisionError:
print("3. 捕获到除零异常")
finally:
print("4. **finally 块始终执行**")
print("5. 函数结束")
demo_exception()
# 输出:
# 1. 正在执行 try 块
# 3. 捕获到除零异常
# 4. **finally 块始终执行**
# 5. 函数结束
案例3:try 块中有 return + finally
关键点:finally 会在 return 之前执行
def demo_return():
try:
print("1. try 块中")
return "2. try 返回值"
finally:
print("3. **finally 在 return 之前执行**")
# 这行永远不会执行
print("4. 永远不会执行")
result = demo_return()
print(f"函数返回值: {result}")
# 输出:
# 1. try 块中
# 3. **finally 在 return 之前执行**
# 函数返回值: 2. try 返回值
案例4:嵌套 try-finally
def demo_nested():
try:
print("外层 try")
try:
print("内层 try")
raise ValueError("内层异常")
finally:
print("内层 finally")
except ValueError as e:
print(f"捕获异常: {e}")
finally:
print("外层 finally")
demo_nested()
# 输出:
# 外层 try
# 内层 try
# 内层 finally
# 捕获异常: 内层异常
# 外层 finally
案例5:finally 中的 return 覆盖原有 return
def demo_finally_return():
try:
return "try 的返回值"
finally:
return "finally 的返回值" # 会覆盖 try 的 return
result = demo_finally_return()
print(result) # 输出: finally 的返回值
唯一不执行的情况
import os
def demo_os_exit():
try:
print("try 块")
os._exit(0) # 强制终止进程
finally:
print("这行不会执行") # 不会输出
实际应用场景:资源清理
def read_file_safely(filename):
file = None
try:
file = open(filename, 'r')
data = file.read()
return data
except FileNotFoundError:
print(f"文件 {filename} 不存在")
return None
finally:
if file:
file.close()
print("文件已关闭")
| 场景 | finally 是否执行 |
|---|---|
| try 正常执行 | |
| try 发生异常 | |
| try 中有 return | ✅(在 return 之前) |
| except 中有 return | |
| 程序正常结束 | |
os._exit() 强制退出 |
|
| 系统崩溃/断电 |
最佳实践:使用 finally 来释放资源(文件、网络连接、数据库连接等),确保即使发生异常也能正常清理。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播