通常,当我需要打开一个文件并读取其中的所有行时,我会编写如下内容:
f = open('data.txt')
data = f.readlines()
然而,有一个建议说最好使用上下文管理器来做到这一点:
with open('data.txt') as f:
data = f.readlines()
问题:这两个片段有何不同?为什么第二个比第一个更好?
通常,当我需要打开一个文件并读取其中的所有行时,我会编写如下内容:
f = open('data.txt')
data = f.readlines()
然而,有一个建议说最好使用上下文管理器来做到这一点:
with open('data.txt') as f:
data = f.readlines()
问题:这两个片段有何不同?为什么第二个比第一个更好?
第二个在退出后关闭文件
with。仔细管理资源的有用习惯。如果您写入文件但不立即关闭它,则可能会丢失数据。阅读时,这并不那么重要。
首先,您需要在使用完该文件后关闭该文件:
使用时,退出此块时(包括由于异常退出或只是通过退出函数时),
with open文件将自动关闭。return如果您使用手动打开和关闭的代码,并且这些命令之间抛出异常,则不会发生关闭:
并且使用时
with open,无论如何都会发生关闭。这可以使用 try-finally 来实现:
但它
with会变得更加紧凑。