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).
This commit is contained in:
parent
c4e0d982f3
commit
6d10139d70
16
Lib/os.py
16
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:
|
||||
|
|
|
@ -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()."""
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
Loading…
Reference in New Issue