mirror of https://github.com/python/cpython.git
(Merge 3.3) 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:
commit
43aa0d07e2
16
Lib/os.py
16
Lib/os.py
|
@ -644,7 +644,11 @@ def __init__(self, data, encodekey, decodekey, encodevalue, decodevalue, putenv,
|
||||||
self._data = data
|
self._data = data
|
||||||
|
|
||||||
def __getitem__(self, key):
|
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)
|
return self.decodevalue(value)
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key, value):
|
||||||
|
@ -654,9 +658,13 @@ def __setitem__(self, key, value):
|
||||||
self._data[key] = value
|
self._data[key] = value
|
||||||
|
|
||||||
def __delitem__(self, key):
|
def __delitem__(self, key):
|
||||||
key = self.encodekey(key)
|
encodedkey = self.encodekey(key)
|
||||||
self.unsetenv(key)
|
self.unsetenv(encodedkey)
|
||||||
del self._data[key]
|
try:
|
||||||
|
del self._data[encodedkey]
|
||||||
|
except KeyError:
|
||||||
|
# raise KeyError with the original key value
|
||||||
|
raise KeyError(key)
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
for key in self._data:
|
for key in self._data:
|
||||||
|
|
|
@ -632,6 +632,24 @@ def test_unset_error(self):
|
||||||
key = 'key='
|
key = 'key='
|
||||||
self.assertRaises(OSError, os.environ.__delitem__, 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):
|
class WalkTests(unittest.TestCase):
|
||||||
"""Tests for os.walk()."""
|
"""Tests for os.walk()."""
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,10 @@ Core and Builtins
|
||||||
Library
|
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
|
- Issue #16163: Make the importlib based version of pkgutil.iter_importers
|
||||||
work for submodules. Initial patch by Berker Peksag.
|
work for submodules. Initial patch by Berker Peksag.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue