什么是python关键字“with”用于?
示例来自:http://docs.python.org/tutorial/inputoutput.html
>>> with open('/tmp/workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
答案 0 :(得分:396)
Explanation from the Preshing on Programming blog:
当您有两个相关的操作时,它很方便 作为一对执行,中间有一段代码。经典 例如,打开文件,操纵文件,然后 关闭它:
with open('output.txt', 'w') as f: f.write('Hi there!')
上面的with语句会自动关闭文件后 嵌套的代码块。 (继续阅读,看看究竟如何关闭 发生。)使用with语句的优点是它 无论嵌套块如何退出,都保证关闭文件。如果 在块结束之前发生异常,它将关闭 外部异常处理程序捕获异常之前的文件。如果 嵌套块包含一个return语句,或者一个continue或 break语句,with语句会自动关闭文件 在那些情况下也是如此。
答案 1 :(得分:370)
在python中,在处理非托管资源(如文件流)时使用with
关键字。它类似于VB.NET和C#中的using
语句。它允许您确保在使用它的代码完成运行时“清理”资源,即使抛出异常也是如此。它为try/finally
块提供了“语法糖”。
来自Python Docs:
根据Scott Wisniewski的评论,
with
语句阐明了之前使用try...finally
块的代码,以确保执行清理代码。在本节中,我将讨论通常会使用的语句。在下一节中,我将检查实现细节,并展示如何编写用于此语句的对象。
with
语句是一个控制流结构,其基本结构为:with expression [as variable]: with-block
表达式被计算,它应该产生一个支持上下文管理协议的对象(即具有
__enter__()
和__exit__()
方法)。
更新修复了VB标注。我确实将with
与using
混为一谈。