是我还是在python中打开或关闭文件使用不同的方法使它真的不直观?有没有更好的方法呢?
例:
f = open('file.txt', 'r')
try:
# do stuff with f
finally:
f.close()
Run Code Online (Sandbox Code Playgroud)
现在,为什么我使用内置的"函数"打开但关闭文件我没有"关闭"功能,但我必须将"对象"方法称为"关闭".
使用with关键字使其更直观.当你dedent时它会自动关闭文件.来自文档:
'with'语句阐明了以前使用try ... finally块的代码,以确保执行清理代码.
...
执行此语句后,f中的文件对象将自动关闭,即使for循环在块中途引发了异常.
一个例子:
with open('file.txt', 'r') as f:
# do stuff with f
# Do some other stuff - we dropped down a level of indentation, so the file is closed
Run Code Online (Sandbox Code Playgroud)
更具体地说,它最初会调用上下文的__enter__方法 - 这会打开初始文件.返回的任何内容都是__enter__使用as语句设置的- 在这种情况下,文件将返回self并将设置为f.当with块完成后,它会调用上下文的__exit__方法.对于文件上下文,这会执行finally关闭文件的正常块处理.
请注意,该with块不会为您处理异常,它只是确保__exit__被调用(并且将优雅地关闭文件),即使它们确实发生了.因此,如果你有一段ValueError时间使用该文件,你仍然需要try...catch块内的with块来处理你的计算/脚本/等可能做的任何事情.
正如Marcin所指出的那样,大多数语言都是这样做的try...catch...finally.例如,Java就是这样做的:
BufferedReader reader = null;
try {
reader = new BufferedReader(new File("file.txt"));
// Read in data and do stuff
} catch (Exception e) {
// Shouldn't be this generic, but you get the idea
e.printStackTrace();
} finally {
// Always executes
if (reader != null) reader.close();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
180 次 |
| 最近记录: |