TM.*_*TM. 81 python file-io python-2.4
我目前正在编写一个小脚本,可以在我们的一个服务器上使用Python.服务器只安装了Python 2.4.4.
直到2.5出来之后我才开始使用Python,所以我习惯了以下形式:
with open('file.txt', 'r') as f:
# do stuff with f
Run Code Online (Sandbox Code Playgroud)
但是,with2.5之前没有声明,我无法找到有关手动清理文件对象的正确方法的示例.
使用旧版本的python时,安全处理文件对象的最佳做法是什么?
Jon*_*ric 133
请参阅docs.python.org:
完成文件后,调用f.close()将其关闭并释放打开文件占用的所有系统资源.调用f.close()后,尝试使用该文件对象将自动失败.
因此close()优雅使用try/finally:
f = open('file.txt', 'r')
try:
# do stuff with f
finally:
f.close()
Run Code Online (Sandbox Code Playgroud)
这样可以确保即使# do stuff with f引发异常,f仍然可以正常关闭.
需要注意的是open应该出现之外的try.如果open它本身引发异常,则文件未打开且不需要关闭.此外,如果open引发异常,则不f会将结果分配给它,并且调用它是错误的f.close().
mlj*_*jrg 32
在上面的解决方案中,这里重复:
f = open('file.txt', 'r')
try:
# do stuff with f
finally:
f.close()
Run Code Online (Sandbox Code Playgroud)
如果在成功打开文件之后和尝试之前发生了不好的事情(你永远不知道......),文件将不会被关闭,因此更安全的解决方案是:
f = None
try:
f = open('file.txt', 'r')
# do stuff with f
finally:
if f is not None:
f.close()
Run Code Online (Sandbox Code Playgroud)
小智 12
如果您使用以下内容,则无需根据文档关闭文件:
在处理文件对象时使用 with 关键字是一种很好的做法。这样做的好处是文件在其套件完成后会被正确关闭,即使在途中引发异常也是如此。它也比编写等效的 try-finally 块要短得多:
>>> with open('workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
Run Code Online (Sandbox Code Playgroud)
更多信息:https : //docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects
| 归档时间: |
|
| 查看次数: |
125625 次 |
| 最近记录: |