Skip to main content

Python — With Statement — A Context Manager

🐍 When you open a file, you are required to close it too. If between your open statement and close statement there are n other statements, and in any of the statement an error occurs, your program won't reach the point to close the file. It will remian opened. Try this to understand the issue.
Input
f = open('some_file.txt', 'a')
f.readlines()
f.close()
Output
UnsupportedOperation Error
Input
f.write('add more text to test if file is open')
Output
37
The above example shows that at line 2 an error occurred and the program didn't reach line 3 to close the file. Later we wrote something to the file and it worked, which means the file is still open. Run the close statement again to close it.
Input
f.close()

Protect the file with try/except/finally

One solution to this is use of try/except/finally statements as follows.
Input
f.open('some_file.txt', 'a')
try:
f.readlines()
except:
print('An exception was raised.')
finally:
f.close()
Output
An exception was raised.
Here even if an error occurs, finally statement will be run and that will close the file. You can test that the file is closed by trying to write something in it.
Input
f.write('add more text to test if file is open')
Output
ValueError Error

With Statement

Try/except/finally is great. But too lengthy. One can do the same in short with WITH statement.
Input
with open('oops.txt','a') as f:
f.readlines()
Output
UnsupportedOperation Error
The error has occurred in line 2. Now let's test if the file is still open.
Input
f.write('add more text to test if file is open')
Output
ValueError Error
Excellent. ValueError means the file is closed and write operation is not working because of it. It automatically closes the file on encountering an error.

Comments

Popular posts from this blog

Difference between .exec() and .execPopulate() in Mongoose?

Here I answer what is the difference between .exec() and .execPopulate() in Mongoose? .exec() is used with a query while .execPopulate() is used with a document Syntax for .exec() is as follows: Model.query() . populate ( 'field' ) . exec () // returns promise . then ( function ( document ) { console . log ( document ); }); Syntax for .execPopulate() is as follows: fetchedDocument . populate ( 'field' ) . execPopulate () // returns promise . then ( function ( document ) { console . log ( document ); }); When working with individual document use .execPopulate(), for model query use .exec(). Both returns a promise. One can do without .exec() or .execPopulate() but then has to pass a callback in populate.

Two Ways of rendering in React Examples

Two Ways of rendering in React Examples 1 - Render twice HTML < div id = "p1" ></ div > < div id = "p2" ></ div > CSS . person { display : inline - block ; margin : 10px ; border : 1px solid # eee ; box - shadow : 0 2px 2px # ccc ; } JAVASCRIPT (Babel) function Person ( props ) { return ( < div className = ' person "> < h1 >{ props . name }</ h1 > < p > Age :{ props . age }</ p > </ div > ); } ReactDOM . render (< Person name = "VK" age = "29" />, document . querySselector ( '#p1' )); ReactDOM . render (< Person name = "HK" age = "28" />, document . querySselector ( '#p2' )); 2 Render all at once HTML < div id = "app" ></ div > CSS . person { display : inline - block ; margin : 1...

Resolve: Uncaught TypeError: firebase.database is not a function

If you are getting the error: Uncaught TypeError: firebase.database is not a function Resolve it by including firebase-database.js in your html page as follows: <!-- The core Firebase JS SDK is always required and must be listed first --> <script defer src = "https://www.gstatic.com/firebasejs/6.2.4/firebase-app.js" ></script> <script defer src = "https://www.gstatic.com/firebasejs/3.1.0/firebase-database.js" ></script> That is it. Let me know if this was helpful.