Kaydet (Commit) d6da90f9 authored tarafından Florent Xicluna's avatar Florent Xicluna

Issues #10017 and #14998: Fix TypeError using pprint on dictionaries with unorderable key.

üst b4bbee25
...@@ -86,7 +86,11 @@ class _safe_key: ...@@ -86,7 +86,11 @@ class _safe_key:
self.obj = obj self.obj = obj
def __lt__(self, other): 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: if rv is NotImplemented:
rv = (str(type(self.obj)), id(self.obj)) < \ rv = (str(type(self.obj)), id(self.obj)) < \
(str(type(other.obj)), id(other.obj)) (str(type(other.obj)), id(other.obj))
......
...@@ -462,6 +462,15 @@ class QueryTestCase(unittest.TestCase): ...@@ -462,6 +462,15 @@ class QueryTestCase(unittest.TestCase):
self.assertEqual(clean(pprint.pformat(dict.fromkeys(keys))), self.assertEqual(clean(pprint.pformat(dict.fromkeys(keys))),
'{' + ','.join('%r:None' % k for k in skeys) + '}') '{' + ','.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): class DottedPrettyPrinter(pprint.PrettyPrinter):
def format(self, object, context, maxlevels, level): def format(self, object, context, maxlevels, level):
......
...@@ -98,6 +98,9 @@ Core and Builtins ...@@ -98,6 +98,9 @@ Core and Builtins
Library Library
------- -------
- Issues #10017 and #14998: Fix TypeError using pprint on dictionaries with
user-defined types as keys or other unorderable keys.
- Issue #14635: telnetlib will use poll() rather than select() when possible - Issue #14635: telnetlib will use poll() rather than select() when possible
to avoid failing due to the select() file descriptor limit. to avoid failing due to the select() file descriptor limit.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment