Kaydet (Commit) eb3cd301 authored tarafından Brett Cannon's avatar Brett Cannon

Turned out that if you used explicit relative import syntax

(e.g. from .os import sep) and it failed, import would still try the implicit
relative import semantics of an absolute import (from os import sep). That's
not right, so when level is negative, only do explicit relative import
semantics.

Fixes issue #7902. Thanks to Meador Inge for the patch.
üst b1556c53
......@@ -431,6 +431,18 @@ class RelativeImportTests(unittest.TestCase):
self.assertRaises(ValueError, check_absolute)
self.assertRaises(ValueError, check_relative)
def test_absolute_import_without_future(self):
# If absolute import syntax is used, then do not try to perform
# a relative import in the face of failure.
# Issue #7902.
try:
from .os import sep
except ImportError:
pass
else:
self.fail("explicit relative import triggered an "
"implicit relative import")
def test_main(verbose=None):
run_unittest(ImportTests, PycRewritingTests, PathsTests, RelativeImportTests)
......
......@@ -12,6 +12,9 @@ What's New in Python 2.7 Release Candidate 1?
Core and Builtins
-----------------
- Issue #7902: When using explicit relative import syntax, don't try
implicit relative import semantics.
- Issue #7079: Fix a possible crash when closing a file object while using
it from another thread. Patch by Daniel Stutzbach.
......
......@@ -2134,7 +2134,8 @@ import_module_level(char *name, PyObject *globals, PyObject *locals,
if (parent == NULL)
return NULL;
head = load_next(parent, Py_None, &name, buf, &buflen);
head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
&buflen);
if (head == NULL)
return NULL;
......
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