From 63e4fd7eef8d2da09634e9416dd29fc28d8b8620 Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Wed, 10 Feb 2010 22:42:04 +0000 Subject: [PATCH] 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. --- Lib/shelve.py | 6 +++++- Misc/NEWS | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Lib/shelve.py b/Lib/shelve.py index fb41c844e4fa..8055f42e2291 100644 --- a/Lib/shelve.py +++ b/Lib/shelve.py @@ -145,7 +145,11 @@ class Shelf(UserDict.DictMixin): 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'): diff --git a/Misc/NEWS b/Misc/NEWS index 2eccbabe9e46..0d86fe75311c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -94,6 +94,9 @@ Core and Builtins 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. -- 2.47.3