什么是python关键字“with”用于?

时间:2009-09-02 18:57:51

标签: python

什么是python关键字“with”用于?

示例来自:http://docs.python.org/tutorial/inputoutput.html

>>> with open('/tmp/workfile', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

2 个答案:

答案 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

  

with语句阐明了之前使用try...finally块的代码,以确保执行清理代码。在本节中,我将讨论通常会使用的语句。在下一节中,我将检查实现细节,并展示如何编写用于此语句的对象。

     

with语句是一个控制流结构,其基本结构为:

with expression [as variable]:
    with-block
     

表达式被计算,它应该产生一个支持上下文管理协议的对象(即具有__enter__()__exit__()方法)。

根据Scott Wisniewski的评论,

更新修复了VB标注。我确实将withusing混为一谈。