[Python-checkins] r74599 - in python/branches/py3k: Lib/importlib/_bootstrap.py Lib/importlib/test/import_/test_packages.py Lib/importlib/test/regrtest.py Misc/NEWS

brett.cannon python-checkins at python.org
Sun Aug 30 22:22:21 CEST 2009


Author: brett.cannon
Date: Sun Aug 30 22:22:21 2009
New Revision: 74599

Log:
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.


Modified:
   python/branches/py3k/Lib/importlib/_bootstrap.py
   python/branches/py3k/Lib/importlib/test/import_/test_packages.py
   python/branches/py3k/Lib/importlib/test/regrtest.py
   python/branches/py3k/Misc/NEWS

Modified: python/branches/py3k/Lib/importlib/_bootstrap.py
==============================================================================
--- python/branches/py3k/Lib/importlib/_bootstrap.py	(original)
+++ python/branches/py3k/Lib/importlib/_bootstrap.py	Sun Aug 30 22:22:21 2009
@@ -879,7 +879,11 @@
                 _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)

Modified: python/branches/py3k/Lib/importlib/test/import_/test_packages.py
==============================================================================
--- python/branches/py3k/Lib/importlib/test/import_/test_packages.py	(original)
+++ python/branches/py3k/Lib/importlib/test/import_/test_packages.py	Sun Aug 30 22:22:21 2009
@@ -21,6 +21,12 @@
                 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

Modified: python/branches/py3k/Lib/importlib/test/regrtest.py
==============================================================================
--- python/branches/py3k/Lib/importlib/test/regrtest.py	(original)
+++ python/branches/py3k/Lib/importlib/test/regrtest.py	Sun Aug 30 22:22:21 2009
@@ -8,9 +8,6 @@
 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

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Sun Aug 30 22:22:21 2009
@@ -68,6 +68,9 @@
 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.
 


More information about the Python-checkins mailing list