summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorent Xicluna <florent.xicluna@gmail.com>2012-07-21 09:22:33 (GMT)
committerFlorent Xicluna <florent.xicluna@gmail.com>2012-07-21 09:22:33 (GMT)
commit6a01fc5d4114ac56105ecbfb4ae3cbe043818449 (patch)
treed09a5ce0c25ed803f9d8c1f8e54bcf1ca5e5847e
parent5116704ec5f12e68835bc0280bb8547eb457a5c7 (diff)
parentd6da90f93d6d44365f5c9f6a2290be90ccfc8d60 (diff)
downloadcpython-6a01fc5d4114ac56105ecbfb4ae3cbe043818449.zip
cpython-6a01fc5d4114ac56105ecbfb4ae3cbe043818449.tar.gz
cpython-6a01fc5d4114ac56105ecbfb4ae3cbe043818449.tar.bz2
Issues #10017 and #14998: Fix TypeError using pprint on dictionaries with unorderable key.
-rw-r--r--Lib/pprint.py6
-rw-r--r--Lib/test/test_pprint.py9
-rw-r--r--Misc/NEWS5
3 files changed, 18 insertions, 2 deletions
diff --git a/Lib/pprint.py b/Lib/pprint.py
index b8417f5..ae96dde 100644
--- a/Lib/pprint.py
+++ b/Lib/pprint.py
@@ -86,7 +86,11 @@ class _safe_key:
self.obj = obj
def __lt__(self, other):
- rv = self.obj.__lt__(other.obj)
+ try:
+ rv = self.obj.__lt__(other.obj)
+ except TypeError:
+ rv = NotImplemented
+
if rv is NotImplemented:
rv = (str(type(self.obj)), id(self.obj)) < \
(str(type(other.obj)), id(other.obj))
diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py
index b26291b..95ffab7 100644
--- a/Lib/test/test_pprint.py
+++ b/Lib/test/test_pprint.py
@@ -466,6 +466,15 @@ class QueryTestCase(unittest.TestCase):
self.assertEqual(clean(pprint.pformat(dict.fromkeys(keys))),
'{' + ','.join('%r:None' % k for k in skeys) + '}')
+ # Issue 10017: TypeError on user-defined types as dict keys.
+ self.assertEqual(pprint.pformat({Unorderable: 0, 1: 0}),
+ '{1: 0, ' + repr(Unorderable) +': 0}')
+
+ # Issue 14998: TypeError on tuples with NoneTypes as dict keys.
+ self.assertEqual(pprint.pformat({(1,): 0, (None,): 0}),
+ '{(1,): 0, (None,): 0}')
+
+
class DottedPrettyPrinter(pprint.PrettyPrinter):
def format(self, object, context, maxlevels, level):
diff --git a/Misc/NEWS b/Misc/NEWS
index c2b9563..33d8d0e 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -48,10 +48,13 @@ Core and Builtins
- Issue 15307: Virtual environments now use symlinks with framework builds
on Mac OS X, like other POSIX builds.
-
+
Library
-------
+- Issues #10017 and #14998: Fix TypeError using pprint on dictionaries with
+ user-defined types as keys or other unorderable keys.
+
- Issue #15397: inspect.getmodulename() is now based directly on importlib
via a new importlib.machinery.all_suffixes() API.