[Python-checkins] cpython (merge 3.3 -> default): (Merge 3.3) Close #17702: os.environ now raises KeyError with the original
victor.stinner
python-checkins at python.org
Sun Apr 14 16:44:02 CEST 2013
http://hg.python.org/cpython/rev/ea54559a4442
changeset: 83370:ea54559a4442
parent: 83368:cd92610b04d3
parent: 83369:72df981e83d3
user: Victor Stinner <victor.stinner at gmail.com>
date: Sun Apr 14 16:38:35 2013 +0200
summary:
(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).
files:
Lib/os.py | 16 ++++++++++++----
Lib/test/test_os.py | 18 ++++++++++++++++++
Misc/NEWS | 4 ++++
3 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/Lib/os.py b/Lib/os.py
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -644,7 +644,11 @@
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):
@@ -654,9 +658,13 @@
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
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -632,6 +632,24 @@
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
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -46,6 +46,10 @@
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.
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list