What is the python keyword "with" used for?

Python

Python Problem Overview


What is the python keyword "with" used for?

Example from: http://docs.python.org/tutorial/inputoutput.html

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

Python Solutions


Solution 1 - Python

In python the with keyword is used when working with unmanaged resources (like file streams). It is similar to the using statement in VB.NET and C#. It allows you to ensure that a resource is "cleaned up" when the code that uses it finishes running, even if exceptions are thrown. It provides 'syntactic sugar' for try/finally blocks.

From Python Docs:

> The with statement clarifies code that previously would use try...finally blocks to ensure that clean-up code is executed. In this section, I’ll discuss the statement as it will commonly be used. In the next section, I’ll examine the implementation details and show how to write objects for use with this statement. > > The with statement is a control-flow structure whose basic structure is: > > with expression [as variable]: > with-block > >The expression is evaluated, and it should result in an object that supports the context management protocol (that is, has __enter__() and __exit__() methods).

Update fixed VB callout per Scott Wisniewski's comment. I was indeed confusing with with using.

Solution 2 - Python

Explanation from the Preshing on Programming blog:

> It’s handy when you have two related operations which you’d like to > execute as a pair or more, with a block of code in between. The classic > example is opening a file, manipulating the file, then > closing it: >
> with open('output.txt', 'w') as f: > f.write('Hi there!') > > The above with statement will automatically close the file after the > nested block of code. (Continue reading to see exactly how the close > occurs.) The advantage of using a with statement is that it is > guaranteed to close the file no matter how the nested block exits. If > an exception occurs before the end of the block, it will close the > file before the exception is caught by an outer exception handler. If > the nested block were to contain a return statement, or a continue or > break statement, the with statement would automatically close the file > in those cases, too.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMikeNView Question on Stackoverflow
Solution 1 - PythonRob AllenView Answer on Stackoverflow
Solution 2 - Pythonuser1559873View Answer on Stackoverflow