Connection.__del__ triggers exception under Python2.3.{3,4}

Rune Froysa <[email protected]> Thu, 13 Jan 2005 00:27:21 +0100
Newsgroups gmane.comp.python.db.pypgsql.user
Message-ID <[email protected]>
I'm having a problem with pyPgSQL 2.4 under Python2.3.  When the
program terminates (normaly), a warning is triggered:

  Exception exceptions.AttributeError: "'NoneType' object has no attribute 'close'" in <bound method Connection.__del__ of <pyPgSQL.PgSQL.Connection instance at 0xb729aa8c>> ignored

Adding some verbosity in PgSQL.py:Connection shows:

   In __closeCursors, self.cursors.data.values=
     [<weakref at 0xb732a70c; to 'instance' at 0xb715e84c>]
   In __closeCursors, self.cursors.data.values=
     [<weakref at 0xb72f4f04; to 'instance' at 0xb72fd46c>]
   In __del__
   In __closeCursors, self.cursors.data.values=
     [<weakref at 0xb72f4f04; dead>]

Note that in the two last calls, the weakref has the same address.
The patch below handles this.  Please let me know if you need further
information.

--- PgSQL.py.~1.35.~	2003-07-14 23:19:20.000000000 +0200
+++ PgSQL.py	2005-01-13 00:06:42.000000000 +0100
@@ -2436,7 +2436,10 @@
 		curs = map(lambda x: x(), self.cursors.data.values())
 
 	    for i in curs:
-		if flag:
+                if i is None:
+                    pass    # reference is dead
+		elif flag:
 		    i.close()
 		else:
 		    i._Cursor__reset()

Regards,
Rune Frøysa


-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt