我试图编写以负责任的方式管理资源的代码.我理解使用后确保文件关闭的常用习惯用法是
with open("filename.txt", 'r') as f:
# ...use file `f`...
Run Code Online (Sandbox Code Playgroud)
但是,我经常看到人们做以下事情:
data = cPickle.load(open("filename.pkl", 'r'))
Run Code Online (Sandbox Code Playgroud)
我想知道这是一种正确的方式,filename.pkl即使cPickle抛出异常,Python总是关闭吗?一些解释(或解释文章的指示)是否安全?
Python 不会自动为您关闭文件,因为它不知道您何时完成文件对象。您需要显式关闭文件或将代码(包含该open(...)函数)包装在with语句中。以下是关于模块的 python 文档示例pickle:
import pprint, pickle
pkl_file = open('data.pkl', 'rb')
data1 = pickle.load(pkl_file)
pprint.pprint(data1)
data2 = pickle.load(pkl_file)
pprint.pprint(data2)
pkl_file.close()
Run Code Online (Sandbox Code Playgroud)
使用with这是一种更具 Python 风格的方法,您可以执行以下操作:
with open("filename.pkl", 'r') as f:
data = cPickle.load(f)
Run Code Online (Sandbox Code Playgroud)