mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-123213: Fixed xml.etree.ElementTree.Element.extend and assignment to no longer hide exceptions (GH-123214)
This commit is contained in:
parent
a64aa47302
commit
90b6d0e0f8
4 changed files with 38 additions and 11 deletions
|
@ -2423,6 +2423,22 @@ class BugsTest(unittest.TestCase):
|
|||
self.assertRaises(TypeError, ET.TreeBuilder().start, "tag")
|
||||
self.assertRaises(TypeError, ET.TreeBuilder().start, "tag", None)
|
||||
|
||||
def test_issue123213_correct_extend_exception(self):
|
||||
# Does not hide the internal exception when extending the element
|
||||
self.assertRaises(ZeroDivisionError, ET.Element('tag').extend,
|
||||
(1/0 for i in range(2)))
|
||||
|
||||
# Still raises the TypeError when extending with a non-iterable
|
||||
self.assertRaises(TypeError, ET.Element('tag').extend, None)
|
||||
|
||||
# Preserves the TypeError message when extending with a generator
|
||||
def f():
|
||||
raise TypeError("mymessage")
|
||||
|
||||
self.assertRaisesRegex(
|
||||
TypeError, 'mymessage',
|
||||
ET.Element('tag').extend, (f() for i in range(2)))
|
||||
|
||||
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
|
@ -3748,6 +3764,22 @@ class ElementSlicingTest(unittest.TestCase):
|
|||
e[1::-sys.maxsize<<64] = [ET.Element('d')]
|
||||
self.assertEqual(self._subelem_tags(e), ['a0', 'd', 'a2', 'a3'])
|
||||
|
||||
def test_issue123213_setslice_exception(self):
|
||||
e = ET.Element('tag')
|
||||
# Does not hide the internal exception when assigning to the element
|
||||
with self.assertRaises(ZeroDivisionError):
|
||||
e[:1] = (1/0 for i in range(2))
|
||||
|
||||
# Still raises the TypeError when assigning with a non-iterable
|
||||
with self.assertRaises(TypeError):
|
||||
e[:1] = None
|
||||
|
||||
# Preserve the original TypeError message when assigning.
|
||||
def f():
|
||||
raise TypeError("mymessage")
|
||||
|
||||
with self.assertRaisesRegex(TypeError, 'mymessage'):
|
||||
e[:1] = (f() for i in range(2))
|
||||
|
||||
class IOTest(unittest.TestCase):
|
||||
def test_encoding(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue