@@ -41,6 +41,7 @@ def __init__(self, *args, **kwds):
4141 '''
4242 if len (args ) > 1 :
4343 raise TypeError ('expected at most 1 arguments, got %d' % len (args ))
44+ self .__in_repr = False # detects recursive repr
4445 try :
4546 self .__root
4647 except AttributeError :
@@ -95,10 +96,10 @@ def __reversed__(self):
9596 def __reduce__ (self ):
9697 'Return state information for pickling'
9798 items = [[k , self [k ]] for k in self ]
98- tmp = self .__map , self .__root
99- del self .__map , self .__root
99+ tmp = self .__map , self .__root , self . __in_repr
100+ del self .__map , self .__root , self . __in_repr
100101 inst_dict = vars (self ).copy ()
101- self .__map , self .__root = tmp
102+ self .__map , self .__root , self . __in_repr = tmp
102103 if inst_dict :
103104 return (self .__class__ , (items ,), inst_dict )
104105 return self .__class__ , (items ,)
@@ -167,9 +168,16 @@ def move_to_end(self, key, last=True):
167168
168169 def __repr__ (self ):
169170 'od.__repr__() <==> repr(od)'
171+ if self .__in_repr :
172+ return '...'
170173 if not self :
171174 return '%s()' % (self .__class__ .__name__ ,)
172- return '%s(%r)' % (self .__class__ .__name__ , list (self .items ()))
175+ self .__in_repr = True
176+ try :
177+ result = '%s(%r)' % (self .__class__ .__name__ , list (self .items ()))
178+ finally :
179+ self .__in_repr = False
180+ return result
173181
174182 def copy (self ):
175183 'od.copy() -> a shallow copy of od'
0 commit comments