From: Brett Cannon Date: Thu, 16 Feb 2012 22:47:48 +0000 (-0500) Subject: importlib.__import__() now raises ValueError when level < 0. X-Git-Tag: v3.3.0a1~162 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3b1a06c1eaec92242683b0a3460377e03cb6c214;p=thirdparty%2FPython%2Fcpython.git importlib.__import__() now raises ValueError when level < 0. This is to bring it more in line with what PEP 328 set out to do with removing ambiguous absolute/relative import semantics. --- diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index ad1561efb669..44349a8e1287 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -1048,6 +1048,8 @@ def __import__(name, globals={}, locals={}, fromlist=[], level=0): raise TypeError("module name must be str, not {}".format(type(name))) if level == 0: module = _gcd_import(name) + elif level < 0: + raise ValueError('level must be >= 0') else: package = _calc___package__(globals) module = _gcd_import(name, package, level) diff --git a/Lib/importlib/test/import_/test_api.py b/Lib/importlib/test/import_/test_api.py index 9075d4275976..2fa1f909547d 100644 --- a/Lib/importlib/test/import_/test_api.py +++ b/Lib/importlib/test/import_/test_api.py @@ -12,6 +12,13 @@ class APITest(unittest.TestCase): with self.assertRaises(TypeError): util.import_(42) + def test_negative_level(self): + # Raise ValueError when a negative level is specified. + # PEP 328 did away with sys.module None entries and the ambiguity of + # absolute/relative imports. + with self.assertRaises(ValueError): + util.import_('os', globals(), level=-1) + def test_main(): from test.support import run_unittest diff --git a/Misc/NEWS b/Misc/NEWS index a1810aee71e2..786417fd6ab7 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -466,6 +466,9 @@ Core and Builtins Library ------- +- Do away with ambiguous level values (as suggested by PEP 328) in + importlib.__import__() by raising ValueError when level < 0. + - Issue #2489: pty.spawn could consume 100% cpu when it encountered an EOF. - Issue #13014: Fix a possible reference leak in SSLSocket.getpeercert().