From: Victor Stinner Date: Sun, 14 Apr 2013 14:35:04 +0000 (+0200) Subject: Close #17702: os.environ now raises KeyError with the original environment X-Git-Tag: v3.3.2~104 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6d10139d70b80cf1326c2763dd13ecc169ce1931;p=thirdparty%2FPython%2Fcpython.git Close #17702: os.environ now raises KeyError with the original environment variable name (str on UNIX), instead of using the encoded name (bytes on UNIX). --- diff --git a/Lib/os.py b/Lib/os.py index e4ea1424b92c..06616c64d871 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -669,7 +669,11 @@ class _Environ(MutableMapping): self._data = data def __getitem__(self, key): - value = self._data[self.encodekey(key)] + try: + value = self._data[self.encodekey(key)] + except KeyError: + # raise KeyError with the original key value + raise KeyError(key) return self.decodevalue(value) def __setitem__(self, key, value): @@ -679,9 +683,13 @@ class _Environ(MutableMapping): self._data[key] = value def __delitem__(self, key): - key = self.encodekey(key) - self.unsetenv(key) - del self._data[key] + encodedkey = self.encodekey(key) + self.unsetenv(encodedkey) + try: + del self._data[encodedkey] + except KeyError: + # raise KeyError with the original key value + raise KeyError(key) def __iter__(self): for key in self._data: diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 184c9ae31f70..83373be96e64 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -632,6 +632,24 @@ class EnvironTests(mapping_tests.BasicTestMappingProtocol): key = 'key=' self.assertRaises(OSError, os.environ.__delitem__, key) + def test_key_type(self): + missing = 'missingkey' + self.assertNotIn(missing, os.environ) + + try: + os.environ[missing] + except KeyError as err: + self.assertIs(err.args[0], missing) + else: + self.fail("KeyError not raised") + + try: + del os.environ[missing] + except KeyError as err: + self.assertIs(err.args[0], missing) + else: + self.fail("KeyError not raised") + class WalkTests(unittest.TestCase): """Tests for os.walk().""" diff --git a/Misc/NEWS b/Misc/NEWS index c40ce846a9c3..2ee78a968a21 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -29,6 +29,10 @@ Core and Builtins Library ------- +- Issue #17702: os.environ now raises KeyError with the original environment + variable name (str on UNIX), instead of using the encoded name (bytes on + UNIX). + - Issue #16163: Make the importlib based version of pkgutil.iter_importers work for submodules. Initial patch by Berker Peksag.