finally语句 #
finally块无论是否发生异常都会执行。
一、基本语法 #
python
try:
result = 10 / 0
except ZeroDivisionError:
print("除零错误")
finally:
print("清理工作") # 总是执行
二、资源清理 #
python
# 文件操作
try:
f = open('file.txt')
content = f.read()
except FileNotFoundError:
print("文件不存在")
finally:
f.close() # 确保关闭文件
# 使用with更简洁
with open('file.txt') as f:
content = f.read()
# 数据库连接
try:
conn = connect_database()
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
except DatabaseError:
print("数据库错误")
finally:
conn.close() # 确保关闭连接
三、finally的执行时机 #
python
def test_finally():
try:
return "try"
finally:
print("finally执行") # 在return之前执行
result = test_finally() # 打印"finally执行"
print(result) # "try"
# 即使有return,finally也会执行
def test():
try:
raise ValueError
except:
return "except"
finally:
print("finally") # 仍会执行
四、finally与return #
python
def test():
try:
return 1
finally:
return 2 # 会覆盖try中的return
print(test()) # 2(不推荐这样写)
# 正确做法
def test():
try:
return 1
finally:
print("清理") # 只做清理,不返回值
五、完整结构 #
python
try:
# 可能出错的代码
result = risky_operation()
except SomeError:
# 处理异常
handle_error()
else:
# 无异常时执行
process_result(result)
finally:
# 总是执行
cleanup()
六、最佳实践 #
python
# 使用contextlib简化
from contextlib import contextmanager
@contextmanager
def managed_file(filename):
try:
f = open(filename)
yield f
finally:
f.close()
with managed_file('file.txt') as f:
content = f.read()
最后更新:2026-03-16