面试题答案
一键面试使用finally
子句
- 原理:
finally
子句无论try
块中是否发生异常,都会被执行。在捕获异常并处理后,或者try
块正常执行完毕后,都会执行finally
中的代码。这使得它非常适合用于清理资源,如关闭文件句柄、数据库连接等。 - 场景:适用于各种需要确保资源关闭的场景,尤其是在早期Python版本中,
with
语句支持不完善时。 - 代码示例:
file = None
try:
file = open('test.txt', 'r')
data = file.read()
print(data)
except FileNotFoundError as e:
print(f"文件未找到: {e}")
finally:
if file:
file.close()
使用with
语句
- 原理:
with
语句会在进入代码块时调用对象的__enter__
方法,在离开代码块时(无论是否发生异常)调用对象的__exit__
方法。对于文件对象,__exit__
方法会自动关闭文件,无需手动调用close
方法。 - 场景:主要用于文件操作、数据库连接等需要自动管理资源生命周期的场景。它简化了代码,并且确保资源在使用完毕后正确关闭,即使发生异常。
- 代码示例:
try:
with open('test.txt', 'r') as file:
data = file.read()
print(data)
except FileNotFoundError as e:
print(f"文件未找到: {e}")
总的来说,with
语句语法更简洁,适用于大多数常见的资源管理场景;而finally
子句更通用,在一些复杂场景或需要更多自定义清理逻辑时更有用。