通常,当有人发布他们的代码时,人们会在旁边添加“你应该使用with open('filename') as f
现在的语法。”我同意大多数老式的f = open()
陈述没有附带.close()
,我什至回答过一些问题,其中对“隐式关闭”的依赖是他们编程问题的全部原因。
但是,在某些情况下,将代码嵌套在with
block 似乎给编写代码带来了其他不便。例如,我有时喜欢在开头使用一个标志来表示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()
所以,你所描述的缺点with
无论您如何编写,这确实是正确代码的缺点(在需要清理的情况下)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)