summaryrefslogtreecommitdiffstats
path: root/Lib/importlib
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2013-07-06 18:48:18 (GMT)
committerBrett Cannon <brett@python.org>2013-07-06 18:48:18 (GMT)
commit0075110ab2b2f514484b9a0dcfc229fb23e08ac7 (patch)
tree8a5725ca2ec70c2b1136e4bfcf5060f1e794b3c5 /Lib/importlib
parente0a39de647902d836e2acf680d8cfc5caa21460f (diff)
downloadcpython-0075110ab2b2f514484b9a0dcfc229fb23e08ac7.zip
cpython-0075110ab2b2f514484b9a0dcfc229fb23e08ac7.tar.gz
cpython-0075110ab2b2f514484b9a0dcfc229fb23e08ac7.tar.bz2
Issue #18364: Stop using the ImportError._not_found hack.
The private attribute was leaking out of importlib and led to at least one person noticing it. Switch to another hack which won't leak outside of importlib and is nearly as robust.
Diffstat (limited to 'Lib/importlib')
-rw-r--r--Lib/importlib/_bootstrap.py13
1 files changed, 4 insertions, 9 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index 6607866..436d5b1 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -1536,7 +1536,8 @@ def _sanity_check(name, package, level):
raise ValueError("Empty module name")
-_ERR_MSG = 'No module named {!r}'
+_ERR_MSG_PREFIX = 'No module named '
+_ERR_MSG = _ERR_MSG_PREFIX + '{!r}'
def _find_and_load_unlocked(name, import_):
path = None
@@ -1556,11 +1557,7 @@ def _find_and_load_unlocked(name, import_):
raise ImportError(msg, name=name)
loader = _find_module(name, path)
if loader is None:
- exc = ImportError(_ERR_MSG.format(name), name=name)
- # TODO(brett): switch to a proper ModuleNotFound exception in Python
- # 3.4.
- exc._not_found = True
- raise exc
+ raise ImportError(_ERR_MSG.format(name), name=name)
elif name not in sys.modules:
# The parent import may have already imported this module.
loader.load_module(name)
@@ -1650,9 +1647,7 @@ def _handle_fromlist(module, fromlist, import_):
# Backwards-compatibility dictates we ignore failed
# imports triggered by fromlist for modules that don't
# exist.
- # TODO(brett): In Python 3.4, have import raise
- # ModuleNotFound and catch that.
- if getattr(exc, '_not_found', False):
+ if str(exc).startswith(_ERR_MSG_PREFIX):
if exc.name == from_name:
continue
raise