Commit 273323cf authored by Brett Cannon's avatar Brett Cannon

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.
parent 09b86d11
...@@ -203,6 +203,11 @@ class RelativeImports(unittest.TestCase): ...@@ -203,6 +203,11 @@ class RelativeImports(unittest.TestCase):
self.assertEqual(mod.__name__, 'crash.mod') self.assertEqual(mod.__name__, 'crash.mod')
self.relative_import_test(create, globals_, callback) 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(): def test_main():
from test.support import run_unittest from test.support import run_unittest
......
...@@ -10,6 +10,9 @@ What's New in Python 3.3.0 Alpha 3? ...@@ -10,6 +10,9 @@ What's New in Python 3.3.0 Alpha 3?
Core and Builtins 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 - Issue #10854: The ImportError raised when an extension module on Windows
fails to import now uses the new path and name attributes from fails to import now uses the new path and name attributes from
Issue #1559549. Issue #1559549.
......
...@@ -2355,8 +2355,9 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, ...@@ -2355,8 +2355,9 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals,
} }
} }
else { else {
package = _PyDict_GetItemIdWithError(globals, &PyId___name__); package = _PyDict_GetItemId(globals, &PyId___name__);
if (package == NULL) { if (package == NULL) {
PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
goto error; goto error;
} }
else if (!PyUnicode_Check(package)) { else if (!PyUnicode_Check(package)) {
......
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