经常当有人发布他们的代码时,人们会在旁边加上一句“你现在应该使用 with open('filename') as f
语法。”我同意大多数老式的 f = open()
语句没有伴随的 .close()
,我什至回答了这种依赖于“隐式关闭”是他们编程问题的全部原因。
但是,在某些情况下,将代码嵌套在 with
block 中似乎会给编写代码带来其他不便。例如,有时我喜欢在开头使用标志来表示 writefile = True
。这让我只能打开和关闭要使用的文件,同时保持相同的处理线程。在代码的不同位置,我可以打印到屏幕或写入文件。 (我意识到我会打开 stdout
或开头的文件并改用该方法。)
我的问题是:除了不必显式关闭文件外,还有其他原因可以使用with
语法来处理文件,尤其是输出文件吗? (“更多 pythonic”本身并不是理由。)如果这是重复的,我很乐意指出这一点,但我自己找不到。
最佳答案
with
没有其他优势:确保清理是它的唯一目的。
无论如何,您都需要一个作用域 block ,以便在发生异常时关闭文件:
writefile = random.choice([True, False])
f = open(filename) if writefile else None
try:
# some code or other
finally:
if writefile:
f.close()
因此,无论您如何编写,您描述为 with
的缺点实际上是正确代码的缺点(在需要清理的情况下)。
关于python - 为什么 `with open()` 更适合在 Python 中打开文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19711344/