pythonic way to free resources

Skip Montanaro skip at pobox.com
Wed Aug 14 20:30:44 CEST 2002


    Chirayu> I'm from the C++ world. I'm used to writing code like this.

    Chirayu> // some block of code - could be try/catch, func body, loop body, etc
    Chirayu> {
    Chirayu>      ifstream inp (inFIle, ios::read | ios::binary)
    Chirayu>      ofstream out (outFIle, ios::write | ios::binary)
    Chirayu>      ......
    Chirayu>      use inp and out
    Chirayu>      .......
    Chirayu> }
    ...
    Chirayu> What is the python idiom to do something like this?

In Python, you'd use try/finally.  Something like

    dbconn = self.db_pool.get()
    try:
        c = dbconn.cursor()
        c.execute("select ...")
        for row in c.fetchall():
            pass
    finally:
        self.db_pool.put(dbconn)

In the case of local file objects you don't need to use try/finally however.
When a name goes out of scope the reference count of the object who which it
refers is decremented, and if it reaches zero the object is reclaimed.  That
would hold true in this case if inFIle was opened successfully but outFIle
was not.  (Interesting studly caps by the way... ;-)

-- 
Skip Montanaro
skip at pobox.com
consulting: http://manatee.mojam.com/~skip/resume.html




More information about the Python-list mailing list