Merged revisions 78145 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r78145 | r.david.murray | 2010-02-10 21:42:19 -0500 (Wed, 10 Feb 2010) | 18 lines

  Merged revisions 78141-78142 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r78141 | r.david.murray | 2010-02-10 20:38:42 -0500 (Wed, 10 Feb 2010) | 6 lines

    Issue 5754:  tweak shelve doc wording to make it clearer that even when
    writeback=True values are written to the backing store when assigned to
    the shelf.  Add test to confirm that this happens.  Doc patch and added
    test by Robert Lehmann.  I also fixed the cross references to the sync
    and close methods.
  ........
    r78142 | r.david.murray | 2010-02-10 20:56:42 -0500 (Wed, 10 Feb 2010) | 3 lines

    Improve issue 7835 fix per MAL to handle the case that the
    module dictionary has also been cleared.
  ........
................
diff --git a/Lib/shelve.py b/Lib/shelve.py
index 8271dfe..52e471a 100644
--- a/Lib/shelve.py
+++ b/Lib/shelve.py
@@ -136,11 +136,12 @@
             self.dict.close()
         except AttributeError:
             pass
-        # _ClosedDict can be None when close is called from __del__ during shutdown
-        if _ClosedDict is None:
-            self.dict = None
-        else:
+        # Catch errors that may happen when close is called from __del__
+        # because CPython is in interpreter shutdown.
+        try:
             self.dict = _ClosedDict()
+        except (NameError, TypeError):
+            self.dict = None
 
     def __del__(self):
         if not hasattr(self, 'writeback'):