@@ -2423,6 +2423,22 @@ def test_39495_treebuilder_start(self):
24232423 self .assertRaises (TypeError , ET .TreeBuilder ().start , "tag" )
24242424 self .assertRaises (TypeError , ET .TreeBuilder ().start , "tag" , None )
24252425
2426+ def test_issue123213_correct_extend_exception (self ):
2427+ # Does not hide the internal exception when extending the element
2428+ self .assertRaises (ZeroDivisionError , ET .Element ('tag' ).extend ,
2429+ (1 / 0 for i in range (2 )))
2430+
2431+ # Still raises the TypeError when extending with a non-iterable
2432+ self .assertRaises (TypeError , ET .Element ('tag' ).extend , None )
2433+
2434+ # Preserves the TypeError message when extending with a generator
2435+ def f ():
2436+ raise TypeError ("mymessage" )
2437+
2438+ self .assertRaisesRegex (
2439+ TypeError , 'mymessage' ,
2440+ ET .Element ('tag' ).extend , (f () for i in range (2 )))
2441+
24262442
24272443
24282444# --------------------------------------------------------------------
@@ -3748,6 +3764,22 @@ def test_setslice_negative_steps(self):
37483764 e [1 ::- sys .maxsize << 64 ] = [ET .Element ('d' )]
37493765 self .assertEqual (self ._subelem_tags (e ), ['a0' , 'd' , 'a2' , 'a3' ])
37503766
3767+ def test_issue123213_setslice_exception (self ):
3768+ e = ET .Element ('tag' )
3769+ # Does not hide the internal exception when assigning to the element
3770+ with self .assertRaises (ZeroDivisionError ):
3771+ e [:1 ] = (1 / 0 for i in range (2 ))
3772+
3773+ # Still raises the TypeError when assigning with a non-iterable
3774+ with self .assertRaises (TypeError ):
3775+ e [:1 ] = None
3776+
3777+ # Preserve the original TypeError message when assigning.
3778+ def f ():
3779+ raise TypeError ("mymessage" )
3780+
3781+ with self .assertRaisesRegex (TypeError , 'mymessage' ):
3782+ e [:1 ] = (f () for i in range (2 ))
37513783
37523784class IOTest (unittest .TestCase ):
37533785 def test_encoding (self ):
0 commit comments