我目前正在编写一个小脚本,供在使用Python的一台服务器上使用。该服务器仅安装了Python 2.4.4。
直到2.5版本问世,我才开始使用Python,所以我习惯了这种形式:
with open('file.txt', 'r') as f: # do stuff with f
但是,with在2.5之前没有声明,而且我很难找到有关手动清理文件对象的正确方法的示例。
with
使用旧版本的python时安全处置文件对象的最佳实践是什么?
参见docs.python.org:
处理完文件后,调用f.close()将其关闭并释放打开文件占用的所有系统资源。调用f.close()之后,尝试使用文件对象将自动失败。
因此可以close()优雅地与try/finally:
close()
try/finally
f = open('file.txt', 'r') try: # do stuff with f finally: f.close()
这样可以确保即使# do stuff with f引发异常,f也仍然可以正确关闭。
# do stuff with f
f
需要注意的是open应该出现 之外 的try。如果open自身引发异常,则说明文件未打开,因此不需要关闭。另外,如果open引发异常,则 不会 分配其结果,f并且调用会出错f.close()。
open
try
f.close()