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))
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):
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
to avoid failing due to the select() file descriptor limit.