@@ -195,6 +195,36 @@ def test_mutation(self):
195195 d .extend (xrange (20 ))
196196 self .assertEqual (len (it ), 0 )
197197
198+ ## -- Check to make sure exceptions are not suppressed by __length_hint__()
199+
200+
201+ class BadLen (object ):
202+ def __iter__ (self ): return iter (range (10 ))
203+ def __len__ (self ):
204+ raise RuntimeError ('hello' )
205+
206+ class BadLengthHint (object ):
207+ def __iter__ (self ): return iter (range (10 ))
208+ def __length_hint__ (self ):
209+ raise RuntimeError ('hello' )
210+
211+ class TestLengthHintExceptions (unittest .TestCase ):
212+
213+ def test_issue1242657 (self ):
214+ self .assertRaises (RuntimeError , list , BadLen ())
215+ self .assertRaises (RuntimeError , list , BadLengthHint ())
216+ self .assertRaises (RuntimeError , [].extend , BadLen ())
217+ self .assertRaises (RuntimeError , [].extend , BadLengthHint ())
218+ self .assertRaises (RuntimeError , zip , BadLen ())
219+ self .assertRaises (RuntimeError , zip , BadLengthHint ())
220+ self .assertRaises (RuntimeError , filter , None , BadLen ())
221+ self .assertRaises (RuntimeError , filter , None , BadLengthHint ())
222+ self .assertRaises (RuntimeError , map , chr , BadLen ())
223+ self .assertRaises (RuntimeError , map , chr , BadLengthHint ())
224+ b = bytearray (range (10 ))
225+ self .assertRaises (RuntimeError , b .extend , BadLen ())
226+ self .assertRaises (RuntimeError , b .extend , BadLengthHint ())
227+
198228def test_main ():
199229 unittests = [
200230 TestRepeat ,
@@ -209,6 +239,7 @@ def test_main():
209239 TestSet ,
210240 TestList ,
211241 TestListReversed ,
242+ TestLengthHintExceptions ,
212243 ]
213244 test_support .run_unittest (* unittests )
214245
0 commit comments