Commit 1c1dcbfd authored by Brett Cannon's avatar Brett Cannon

Trying to import a submodule from another module and not a package was raising

AttributeError in importlib when it should be an ImportError.

Found when running importlib against test_runpy.
parent 82a23fe3
......@@ -879,7 +879,11 @@ def _gcd_import(name, package=None, level=0):
_gcd_import(parent)
# Backwards-compatibility; be nicer to skip the dict lookup.
parent_module = sys.modules[parent]
path = parent_module.__path__
try:
path = parent_module.__path__
except AttributeError:
raise ImportError("no module named {}; "
"{} is not a package".format(name, parent))
meta_path = sys.meta_path + _IMPLICIT_META_PATH
for finder in meta_path:
loader = finder.find_module(name, path)
......
......@@ -21,6 +21,12 @@ class ParentModuleTests(unittest.TestCase):
with self.assertRaises(ImportError):
import_util.import_('pkg.module')
def test_module_not_package(self):
# Try to import a submodule from a non-package should raise ImportError.
assert not hasattr(sys, '__path__')
with self.assertRaises(ImportError):
import_util.import_('sys.no_submodules_here')
def test_main():
from test.support import run_unittest
......
......@@ -8,9 +8,6 @@ this script.
XXX FAILING
test_import # execution bit, exception name differing, file name differing
between code and module (?)
test_runpy # Importing sys.imp.eric raises AttributeError instead of
ImportError (as does any attempt to import a sub-module
from a non-package, e.g. tokenize.menotreal)
"""
import importlib
......
......@@ -68,6 +68,9 @@ C-API
Library
-------
- Trying to import a submodule from a module that is not a package, ImportError
should be raised, not AttributeError.
- When the globals past to importlib.__import__() has __package__ set to None,
fall back to computing what __package__ should be instead of giving up.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment