From: Ezio Melotti Date: Mon, 9 May 2011 03:28:42 +0000 (+0300) Subject: #11910: change import_fresh_module to return None when one of the "fresh" modules... X-Git-Tag: v2.7.2rc1~54 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=193c34ba86bbe5b0c35c66d1edc89e69fed31391;p=python #11910: change import_fresh_module to return None when one of the "fresh" modules can not be imported. --- diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index 97bfae8373..df4d1241a6 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -84,12 +84,14 @@ def import_module(name, deprecated=False): def _save_and_remove_module(name, orig_modules): """Helper function to save and remove a module from sys.modules - Return value is True if the module was in sys.modules and - False otherwise.""" + Return True if the module was in sys.modules, False otherwise. + Raise ImportError if the module can't be imported.""" saved = True try: orig_modules[name] = sys.modules[name] except KeyError: + # try to import the module and raise an error if it can't be imported + __import__(name) saved = False else: del sys.modules[name] @@ -99,8 +101,7 @@ def _save_and_remove_module(name, orig_modules): def _save_and_block_module(name, orig_modules): """Helper function to save and block a module in sys.modules - Return value is True if the module was in sys.modules and - False otherwise.""" + Return True if the module was in sys.modules, False otherwise.""" saved = True try: orig_modules[name] = sys.modules[name] @@ -116,6 +117,7 @@ def import_fresh_module(name, fresh=(), blocked=(), deprecated=False): the sys.modules cache is restored to its original state. Modules named in fresh are also imported anew if needed by the import. + If one of these modules can't be imported, None is returned. Importing of modules named in blocked is prevented while the fresh import takes place. @@ -137,6 +139,8 @@ def import_fresh_module(name, fresh=(), blocked=(), deprecated=False): if not _save_and_block_module(blocked_name, orig_modules): names_to_remove.append(blocked_name) fresh_module = importlib.import_module(name) + except ImportError: + fresh_module = None finally: for orig_name, module in orig_modules.items(): sys.modules[orig_name] = module