summaryrefslogtreecommitdiffstats
path: root/Lib/repr.py
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2007-09-12 19:00:07 (GMT)
committerGeorg Brandl <georg@python.org>2007-09-12 19:00:07 (GMT)
commit8fd3ecf9289942d5544c3943be9bc4e9386908b7 (patch)
tree1c380a82b3c4d3e280b02a714148c070da15db72 /Lib/repr.py
parentc28d5fb456444216e17afb81988e938eaea34592 (diff)
downloadcpython-8fd3ecf9289942d5544c3943be9bc4e9386908b7.zip
cpython-8fd3ecf9289942d5544c3943be9bc4e9386908b7.tar.gz
cpython-8fd3ecf9289942d5544c3943be9bc4e9386908b7.tar.bz2
Bug #1153: repr.repr() now doesn't require set and dictionary items
to be orderable to properly represent them.
Diffstat (limited to 'Lib/repr.py')
-rw-r--r--Lib/repr.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/Lib/repr.py b/Lib/repr.py
index 59015b1..3c26cc3 100644
--- a/Lib/repr.py
+++ b/Lib/repr.py
@@ -1,4 +1,4 @@
-"""Redo the `...` (representation) but with limits on most sizes."""
+"""Redo the builtin repr() (representation) but with limits on most sizes."""
__all__ = ["Repr","repr"]
@@ -62,11 +62,11 @@ class Repr:
return self._repr_iterable(x, level, header, '])', self.maxarray)
def repr_set(self, x, level):
- x = sorted(x)
+ x = _possibly_sorted(x)
return self._repr_iterable(x, level, 'set([', '])', self.maxset)
def repr_frozenset(self, x, level):
- x = sorted(x)
+ x = _possibly_sorted(x)
return self._repr_iterable(x, level, 'frozenset([', '])',
self.maxfrozenset)
@@ -80,7 +80,7 @@ class Repr:
newlevel = level - 1
repr1 = self.repr1
pieces = []
- for key in islice(sorted(x), self.maxdict):
+ for key in islice(_possibly_sorted(x), self.maxdict):
keyrepr = repr1(key, newlevel)
valrepr = repr1(x[key], newlevel)
pieces.append('%s: %s' % (keyrepr, valrepr))
@@ -110,7 +110,7 @@ class Repr:
s = __builtin__.repr(x)
# Bugs in x.__repr__() can cause arbitrary
# exceptions -- then make up something
- except:
+ except Exception:
return '<%s instance at %x>' % (x.__class__.__name__, id(x))
if len(s) > self.maxstring:
i = max(0, (self.maxstring-3)//2)
@@ -118,5 +118,15 @@ class Repr:
s = s[:i] + '...' + s[len(s)-j:]
return s
+
+def _possibly_sorted(x):
+ # Since not all sequences of items can be sorted and comparison
+ # functions may raise arbitrary exceptions, return an unsorted
+ # sequence in that case.
+ try:
+ return sorted(x)
+ except Exception:
+ return list(x)
+
aRepr = Repr()
repr = aRepr.repr