通常,当有人发布他们的代码时,人们会将"你with open('filename') as f现在应该使用语法"放在一边.我同意大多数老式的f = open()陈述没有附带.close(),我甚至回答了这些依赖于"隐式关闭"的问题,这是他们编程问题的全部原因.
但是,在某些情况下,将代码嵌套在with块中似乎会在编写代码时产生其他不便.例如,我有时喜欢在开头说一个标志writefile = True.这使我只能打开和关闭文件,如果要使用它,同时保持相同的处理线程.在代码的不同位置,我可以打印到屏幕或写入文件.(我意识到我会stdout在开头打开文件,而是使用那种方法.)
我的问题是:除了不必显式关闭文件外,还有其他原因使用with语法来处理文件,尤其是输出文件吗?("更多pythonic"本身并不是一个原因.)如果这是重复,我会很高兴有这个指出,但我自己找不到它.
没有其他优势with:确保清理是唯一的.
无论如何,您需要一个范围块,以便在发生异常时关闭文件:
writefile = random.choice([True, False])
f = open(filename) if writefile else None
try:
# some code or other
finally:
if writefile:
f.close()
Run Code Online (Sandbox Code Playgroud)
因此,with无论你如何编写它,你所描述的缺点都是正确代码的缺点(在需要清理的情况下).