summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Lib/importlib/test/import_/test_relative_imports.py5
-rw-r--r--Misc/NEWS3
-rw-r--r--Python/import.c3
3 files changed, 10 insertions, 1 deletions
diff --git a/Lib/importlib/test/import_/test_relative_imports.py b/Lib/importlib/test/import_/test_relative_imports.py
index 5b4e23c8b2..4569c26424 100644
--- a/Lib/importlib/test/import_/test_relative_imports.py
+++ b/Lib/importlib/test/import_/test_relative_imports.py
@@ -203,6 +203,11 @@ class RelativeImports(unittest.TestCase):
self.assertEqual(mod.__name__, 'crash.mod')
self.relative_import_test(create, globals_, callback)
+ def test_relative_import_no_globals(self):
+ # No globals for a relative import is an error.
+ with self.assertRaises(KeyError):
+ import_util.import_('sys', level=1)
+
def test_main():
from test.support import run_unittest
diff --git a/Misc/NEWS b/Misc/NEWS
index f1837e732c..9f0009fad8 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ What's New in Python 3.3.0 Alpha 3?
Core and Builtins
-----------------
+- Issue #14592: Attempting a relative import w/o __package__ or __name__ set in
+ globals raises a KeyError.
+
- Issue #10854: The ImportError raised when an extension module on Windows
fails to import now uses the new path and name attributes from
Issue #1559549.
diff --git a/Python/import.c b/Python/import.c
index f3de7d8262..3e620b3706 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2355,8 +2355,9 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals,
}
}
else {
- package = _PyDict_GetItemIdWithError(globals, &PyId___name__);
+ package = _PyDict_GetItemId(globals, &PyId___name__);
if (package == NULL) {
+ PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
goto error;
}
else if (!PyUnicode_Check(package)) {