2017-05-28 18 views
2

我知道with块会在您退出该块后自动调用close(),并且通常用于确保不会忘记关闭文件。带块或close()更多Pythonic?

似乎有

with open(file, 'r+') as f: 
    do_things(f) 

f = open(file, 'r+') 
do_things(f) 
f.close() 

是一种方法比其他更Python之间没有技术上的差异?我应该在我的代码中使用哪一个?

+3

还有就是两者之间巨大的技术差! 'with'版本确保'close()'被调用,即使'do_things()引发异常。你需要添加一个'try'和'finally'到另一个版本来匹配这个行为。 – jasonharper

+1

FWIW,我不认为这个问题是重复的3012488.这些主题确实重叠,但另一个问题非常广泛,并没有具体说明哪种方法更适合关闭文件。 –

回答

4

Pythonic比其他的方式更单一吗?

是的,with-statement表单是首选,它将文件管理逻辑封装到一行代码中。提高了业务逻辑与管理逻辑的比率,使程序更易于阅读和推理。

PEP 343,该用陈述的预期目的是:

This PEP adds a new statement "with" to the Python language to make 
it possible to factor out standard uses of try/finally statements.