The with keyword in Python is a control flow structure that simplifies error handling. The with statement is particularly used for clean-up tasks as you are working with unmanaged resources e.g. opening a file, performing some operations and closing it (file streams).
The ‘with’ was added as an optional feature in Python 2.5. The following directive was required for using this feature:
from __future__ import with_statement
However, from version 2.6, the ‘with’ became a keyword and you do not need to enable it in order to use it.
Structure of with statement
Following is the general structure of using the Python with statement:
with expression [as variable]:
#code to execute here
So, in the with statement, the expression is evaluated. In order to make it work, this should result in an object that supports __enter__() and __exit__() methods. For example, file object supports the __enter__() and __exit__() method, so you may use it there (as shown in the example below).
An example of using ‘with’ statement
In the following program, the with statement is used with the open function. A text file is given and its content will be displayed in the with block.
#Using with statement with a file
with open("test.txt") as with_demo:
content = with_demo.read()
Normally, as you open the file in the system, you should close it by using the close() method. However, in the program, we did not close it by using the close() method. The ‘with’ statement has done this automatically for us, as such, it ensures cleaning up the resources.
Even if a Python exception occurs during the file opening, manipulation (as performing some operation) the with statement will execute the close() before the exception is caught.
You may learn more about the mechanism of how ‘with’ statement works here.