From: Brett Cannon Date: Tue, 17 Apr 2012 23:05:11 +0000 (-0400) Subject: Issue #14592: A relative import will raise a KeyError if __package__ X-Git-Tag: v3.3.0a3~176 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=273323cf68e8d55c67622412ecf531e359a54e11;p=python Issue #14592: A relative import will raise a KeyError if __package__ or __name__ are not set in globals. Thanks to Stefan Behnel for the bug report. --- 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)) {