Nested try...except

Carl Banks pavlovevidence at gmail.com
Wed Apr 2 20:08:32 EDT 2008


On Apr 2, 9:06 am, Magnus.Morab... at gmail.com wrote:
> Hi,
>
> I found the following code on the net -
>
> http://mail-archives.apache.org/mod_mbox/httpd-python-cvs/200509.mbox/%3C20050924104732.5116.qm...@minotaur.apache.org%3E
>
> def count(self):
> -            db = sqlite.connect(self.filename,
> isolation_level=ISOLATION_LEVEL)
> -            try:
> -                try:
> -                    cur = db.cursor()
> -                    cur.execute("select count(*) from sessions")
> -                    return cur.fetchone()[0]
> -                finally:
> -                    cur.close()
> -            finally:
> -                db.close()
>
> I don't understand though why the second try is not after the line cur
> = db.cursor(). Can anyone explain for me why?

It's a pretty common mistake to make, I assume because there's a
tendency to line up the init and finalize statements.  In other words,
it looks wrong for open and close to be in different columns:

open()
try:
    do_stuff()
finally:
    close()

It's almost always wrong for initiazation to be inside of the try
block.

Perhaps the advent of with blocks will help reduce this error in the
future.


Carl Banks



More information about the Python-list mailing list