[Python-checkins] r78137 - in python/trunk: Lib/shelve.py Misc/NEWS

M.-A. Lemburg mal at egenix.com
Wed Feb 10 23:59:58 CET 2010


r.david.murray wrote:
> Author: r.david.murray
> Date: Wed Feb 10 23:42:04 2010
> New Revision: 78137
> 
> Log:
> Issue 7835:  Shelve's __del__ method calls its close method, and its
> close method refers to an identifier in the global module namespace.
> This means that when __del__ is called during interpreter shutdown (if,
> for example, the calling program still has a pointer to the shelf),
> sometimes that global identifier would wind up being None, causing
> mysterious 'ignored' exceptions.  This patch checks for the possible None
> value first before using the global, thus avoiding the error messages.

The setting of the globals to None is an implementation
detail of the current CPython implementation
that may not be present in other Python implementations.

Please use a try-except approach instead, e.g.

try:
    self.dict = _ClosedDict()
except (NameError, TypeError):
    self.dict = None

Thanks.

> Modified:
>    python/trunk/Lib/shelve.py
>    python/trunk/Misc/NEWS
> 
> Modified: python/trunk/Lib/shelve.py
> ==============================================================================
> --- python/trunk/Lib/shelve.py	(original)
> +++ python/trunk/Lib/shelve.py	Wed Feb 10 23:42:04 2010
> @@ -145,7 +145,11 @@
>              self.dict.close()
>          except AttributeError:
>              pass
> -        self.dict = _ClosedDict()
> +        # _ClosedDict can be None when close is called from __del__ during shutdown
> +        if _ClosedDict is None:
> +            self.dict = None
> +        else:
> +            self.dict = _ClosedDict()
>  
>      def __del__(self):
>          if not hasattr(self, 'writeback'):
> 
> Modified: python/trunk/Misc/NEWS
> ==============================================================================
> --- python/trunk/Misc/NEWS	(original)
> +++ python/trunk/Misc/NEWS	Wed Feb 10 23:42:04 2010
> @@ -94,6 +94,9 @@
>  Library
>  -------
>  
> +- Issue #7835: shelve should no longer produce mysterious warnings during
> +  interpreter shutdown.
> +
>  - Issue #2746: Don't escape ampersands and angle brackets ("&", "<", ">")
>    in XML processing instructions and comments.  These raw characters are
>    allowed by the XML specification, and are necessary when outputting e.g.
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, Feb 10 2010)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________

::: Try our new mxODBC.Connect Python Database Interface for free ! ::::


   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611
               http://www.egenix.com/company/contact/


More information about the Python-checkins mailing list