Nested try...except

bruno.desthuilliers at gmail.com bruno.desthuilliers at gmail.com
Thu Apr 3 01:00:54 CEST 2008


On 2 avr, 18:25, Nanjundi <nanju... at gmail.com> wrote:
> On Apr 2, 9:22 am, Magnus.Morab... at gmail.com wrote:
>
>
>
> > On 2 Apr, 15:15, Magnus.Morab... at gmail.com wrote:
>
> > > On 2 Apr, 15:12, cokofree... at gmail.com wrote:
>
> > > > On Apr 2, 3:06 pm, 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?
>
> > > > > /Barry.
>
> > > > Better question is why is there a try with no except...
>
> > > > Better yet, WHY is there two TRY statements when there could quite
> > > > happily be only one...
>
> > > > Towards what you are asking, I GUESS...because the author hoped to
> > > > handle the cases where cur failed to get assigned...but then
> > > > his .close method of it would likely not work anyway...I mean...does
> > > > this even work...YUCK
>
> > > I shouldn't have written "Nested try...except" as the title, instead I
> > > mean "Nested try...finally". Sorry about that...
>
> > > Anyway, how would you do this? That is, use a finally to close the
> > > network connection and the cursor?
>
> > > Thanks for your help,
>
> > > Barry
>
> > Here's what I would do. Is it OK?
>
> >     def ExecuteWithNoFetching(self, queryString):
>
> >         sqlServerConnection = adodbapi.connect (";".join (connectors))
> >         try:
> >             cursor = sqlServerConnection.cursor()
> >             try:
> >                 cursor.execute(queryString)
> >                 raise Exception("Exception")
> >                 sqlServerConnection.commit()
> >             finally:
> >                 cursor.close()
> >         finally:
> >             sqlServerConnection.close()
>
> No.. Why do you have raise statement?
> "sqlServerConnection.commit()" never gets executed.

It's demonstration code.

> -N




More information about the Python-list mailing list