https://github.com/python/cpython/commit/04bc681e7cf5b7effd99e676b7deceb27fb34434 commit: 04bc681e7cf5b7effd99e676b7deceb27fb34434 branch: main author: Bénédikt Tran <10796600+picn...@users.noreply.github.com> committer: picnixz <10796600+picn...@users.noreply.github.com> date: 2025-04-04T15:04:07Z summary:
gh-131938: Update exception message for `Element.remove()` when an element is not found (#131972) The exception message for `xml.etree.ElementTree.Element.remove` when an element is not found has been updated from "list.remove(x): x not in list" to "Element.remove(x): element not found". files: A Misc/NEWS.d/next/Library/2025-04-01-13-44-26.gh-issue-131938.dm4Suq.rst M Lib/test/test_xml_etree.py M Lib/xml/etree/ElementTree.py M Modules/_elementtree.c diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index 7f5945d8515fba..5fe9d6884106ad 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -344,9 +344,9 @@ def test_simpleops(self): self.serialize_check(element, '<tag key="value"><subtag /></tag>') # 4 element.remove(subelement) self.serialize_check(element, '<tag key="value" />') # 5 - with self.assertRaises(ValueError) as cm: + with self.assertRaisesRegex(ValueError, + r'Element\.remove\(.+\): element not found'): element.remove(subelement) - self.assertEqual(str(cm.exception), 'list.remove(x): x not in list') self.serialize_check(element, '<tag key="value" />') # 6 element[0:0] = [subelement, subelement, subelement] self.serialize_check(element[1], '<subtag />') diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py index ce67d7d7d54748..44ab5d18624e73 100644 --- a/Lib/xml/etree/ElementTree.py +++ b/Lib/xml/etree/ElementTree.py @@ -267,7 +267,11 @@ def remove(self, subelement): """ # assert iselement(element) - self._children.remove(subelement) + try: + self._children.remove(subelement) + except ValueError: + # to align the error message with the C implementation + raise ValueError("Element.remove(x): element not found") from None def find(self, path, namespaces=None): """Find first matching element by tag name or path. diff --git a/Misc/NEWS.d/next/Library/2025-04-01-13-44-26.gh-issue-131938.dm4Suq.rst b/Misc/NEWS.d/next/Library/2025-04-01-13-44-26.gh-issue-131938.dm4Suq.rst new file mode 100644 index 00000000000000..6cc212e0f92aa2 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-04-01-13-44-26.gh-issue-131938.dm4Suq.rst @@ -0,0 +1,3 @@ +:mod:`xml.etree.ElementTree`: update the error message when an element to +remove via :meth:`Element.remove <xml.etree.ElementTree.Element.remove>` is +not found. Patch by Bénédikt Tran. diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index f4f48538e30abe..bf221106c31063 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -1654,7 +1654,8 @@ _elementtree_Element_remove_impl(ElementObject *self, PyObject *subelement) } if (rc == 0) { - PyErr_SetString(PyExc_ValueError, "list.remove(x): x not in list"); + PyErr_SetString(PyExc_ValueError, + "Element.remove(x): element not found"); return NULL; } _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com