[Python-checkins] cpython (3.2): Improve Counter.__repr__() to not fail with unorderable values
raymond.hettinger
python-checkins at python.org
Sat Nov 5 21:43:36 CET 2011
http://hg.python.org/cpython/rev/970ec22ab368
changeset: 73386:970ec22ab368
branch: 3.2
parent: 73383:dc839da60f13
user: Raymond Hettinger <python at rcn.com>
date: Sat Nov 05 13:35:26 2011 -0700
summary:
Improve Counter.__repr__() to not fail with unorderable values
files:
Lib/collections.py | 8 ++++++--
Lib/test/test_collections.py | 6 ++++++
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/Lib/collections.py b/Lib/collections.py
--- a/Lib/collections.py
+++ b/Lib/collections.py
@@ -583,8 +583,12 @@
def __repr__(self):
if not self:
return '%s()' % self.__class__.__name__
- items = ', '.join(map('%r: %r'.__mod__, self.most_common()))
- return '%s({%s})' % (self.__class__.__name__, items)
+ try:
+ items = ', '.join(map('%r: %r'.__mod__, self.most_common()))
+ return '%s({%s})' % (self.__class__.__name__, items)
+ except TypeError:
+ # handle case where values are not orderable
+ return '{0}({1!r})'.format(self.__class__.__name__, dict(self))
# Multiset-style mathematical operations discussed in:
# Knuth TAOCP Volume II section 4.6.3 exercise 19
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -893,6 +893,12 @@
c.subtract('aaaabbcce')
self.assertEqual(c, Counter(a=-1, b=0, c=-1, d=1, e=-1))
+ def test_repr_nonsortable(self):
+ c = Counter(a=2, b=None)
+ r = repr(c)
+ self.assertIn("'a': 2", r)
+ self.assertIn("'b': None", r)
+
def test_helper_function(self):
# two paths, one for real dicts and one for other mappings
elems = list('abracadabra')
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list