summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/modulefinder.py5
-rw-r--r--Lib/test/test_modulefinder.py16
-rw-r--r--Misc/NEWS2
3 files changed, 22 insertions, 1 deletions
diff --git a/Lib/modulefinder.py b/Lib/modulefinder.py
index ad6a644..7f2bf8b 100644
--- a/Lib/modulefinder.py
+++ b/Lib/modulefinder.py
@@ -309,7 +309,10 @@ class ModuleFinder:
def _add_badmodule(self, name, caller):
if name not in self.badmodules:
self.badmodules[name] = {}
- self.badmodules[name][caller.__name__] = 1
+ if caller:
+ self.badmodules[name][caller.__name__] = 1
+ else:
+ self.badmodules[name]["-"] = 1
def _safe_import_hook(self, name, caller, fromlist, level=-1):
# wrapper for self.import_hook() that won't raise ImportError
diff --git a/Lib/test/test_modulefinder.py b/Lib/test/test_modulefinder.py
index b62758a..9d7f76a 100644
--- a/Lib/test/test_modulefinder.py
+++ b/Lib/test/test_modulefinder.py
@@ -190,6 +190,19 @@ a/b/c/e.py
a/b/c/f.py
"""]
+relative_import_test_3 = [
+ "a.module",
+ ["a", "a.module"],
+ ["a.bar"],
+ [],
+ """\
+a/__init__.py
+ def foo(): pass
+a/module.py
+ from . import foo
+ from . import bar
+"""]
+
def open_file(path):
##print "#", os.path.abspath(path)
dirname = os.path.dirname(path)
@@ -256,6 +269,9 @@ class ModuleFinderTest(unittest.TestCase):
def test_relative_imports_2(self):
self._do_test(relative_import_test_2)
+ def test_relative_imports_3(self):
+ self._do_test(relative_import_test_3)
+
def test_main():
distutils.log.set_threshold(distutils.log.WARN)
test_support.run_unittest(ModuleFinderTest)
diff --git a/Misc/NEWS b/Misc/NEWS
index 3d28958..78ecd34 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -30,6 +30,8 @@ Core and Builtins
Library
-------
+- Fixed a modulefinder crash on certain relative imports.
+
- Issue #4150: Pdb's "up" command now works for generator frames in post-mortem
debugging.