Skip to content

Commit

Permalink
pythongh-119577: Adjust DeprecationWarning when testing element truth…
Browse files Browse the repository at this point in the history
… values in ElementTree (pythonGH-119762)

Adjust DeprecationWarning when testing element truth values in
ElementTree, we're planning to go with the more natural True return
rather than a disruptive harder to code around exception raise, and are
deferring the behavior change for a few more releases.
  • Loading branch information
jacobtylerwalls authored and gpshead committed Jun 7, 2024
1 parent 59224b8 commit 59f3369
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 8 deletions.
7 changes: 4 additions & 3 deletions Doc/library/xml.etree.elementtree.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1053,9 +1053,10 @@ Element Objects
:meth:`~object.__getitem__`, :meth:`~object.__setitem__`,
:meth:`~object.__len__`.

Caution: Elements with no subelements will test as ``False``. Testing the
truth value of an Element is deprecated and will raise an exception in
Python 3.14. Use specific ``len(elem)`` or ``elem is None`` test instead.::
Caution: Elements with no subelements will test as ``False``. In a future
release of Python, all elements will test as ``True`` regardless of whether
subelements exist. Instead, prefer explicit ``len(elem)`` or
``elem is not None`` tests.::

element = root.find('foo')

Expand Down
7 changes: 5 additions & 2 deletions Doc/whatsnew/3.12.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1451,8 +1451,6 @@ and will be removed in Python 3.14.

* :mod:`typing`: :class:`!typing.ByteString`

* :mod:`xml.etree.ElementTree`: Testing the truth value of an :class:`xml.etree.ElementTree.Element`.

* The ``__package__`` and ``__cached__`` attributes on module objects.

* The :attr:`~codeobject.co_lnotab` attribute of code objects.
Expand All @@ -1478,6 +1476,11 @@ although there is currently no date scheduled for their removal.

* :class:`typing.Text` (:gh:`92332`)

* :mod:`xml.etree.ElementTree`: Testing the truth value of an
:class:`xml.etree.ElementTree.Element` is deprecated. In a future release it
will always return True. Prefer explicit ``len(elem)`` or
``elem is not None`` tests instead.

* Currently Python accepts numeric literals immediately followed by keywords,
for example ``0in x``, ``1or x``, ``0if 1else 2``. It allows confusing
and ambiguous expressions like ``[0x1for x in y]`` (which can be
Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_xml_etree.py
Original file line number Diff line number Diff line change
Expand Up @@ -4009,7 +4009,7 @@ class BoolTest(unittest.TestCase):
def test_warning(self):
e = ET.fromstring('<a style="new"></a>')
msg = (
r"Testing an element's truth value will raise an exception in "
r"Testing an element's truth value will always return True in "
r"future versions. "
r"Use specific 'len\(elem\)' or 'elem is not None' test instead.")
with self.assertWarnsRegex(DeprecationWarning, msg):
Expand Down
2 changes: 1 addition & 1 deletion Lib/xml/etree/ElementTree.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ def __len__(self):

def __bool__(self):
warnings.warn(
"Testing an element's truth value will raise an exception in "
"Testing an element's truth value will always return True in "
"future versions. "
"Use specific 'len(elem)' or 'elem is not None' test instead.",
DeprecationWarning, stacklevel=2
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
The :exc:`DeprecationWarning` emitted when testing the truth value of an
:class:`xml.etree.ElementTree.Element` now describes unconditionally
returning ``True`` in a future version rather than raising an exception in
Python 3.14.
2 changes: 1 addition & 1 deletion Modules/_elementtree.c
Original file line number Diff line number Diff line change
Expand Up @@ -1504,7 +1504,7 @@ element_bool(PyObject* self_)
{
ElementObject* self = (ElementObject*) self_;
if (PyErr_WarnEx(PyExc_DeprecationWarning,
"Testing an element's truth value will raise an exception "
"Testing an element's truth value will always return True "
"in future versions. Use specific 'len(elem)' or "
"'elem is not None' test instead.",
1) < 0) {
Expand Down

0 comments on commit 59f3369

Please sign in to comment.