diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst index 78c385e8ad2..ad84301f8f3 100644 --- a/Doc/c-api/object.rst +++ b/Doc/c-api/object.rst @@ -149,6 +149,9 @@ Object Protocol representation on success, *NULL* on failure. This is the equivalent of the Python expression ``repr(o)``. Called by the :func:`repr` built-in function. + .. versionchanged:: 3.4 + This function now includes a debug assertion to help ensure that it + does not silently discard an active exception. .. c:function:: PyObject* PyObject_ASCII(PyObject *o) @@ -171,8 +174,8 @@ Object Protocol and, therefore, by the :func:`print` function. .. versionchanged:: 3.4 - This function now includes a debug assertion that ensures it does not - silently discard an active exception. + This function now includes a debug assertion to help ensure that it + does not silently discard an active exception. .. c:function:: PyObject* PyObject_Bytes(PyObject *o) diff --git a/Doc/c-api/veryhigh.rst b/Doc/c-api/veryhigh.rst index 9f21b89b942..f7ed4c77139 100644 --- a/Doc/c-api/veryhigh.rst +++ b/Doc/c-api/veryhigh.rst @@ -322,6 +322,10 @@ the same library that the Python runtime is using. it causes an exception to immediately be thrown; this is used for the :meth:`~generator.throw` methods of generator objects. + .. versionchanged:: 3.4 + This function now includes a debug assertion to help ensure that it + does not silently discard an active exception. + .. c:function:: int PyEval_MergeCompilerFlags(PyCompilerFlags *cf) diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst index 5da98daad2e..720ea6ee17f 100644 --- a/Doc/whatsnew/3.4.rst +++ b/Doc/whatsnew/3.4.rst @@ -1708,12 +1708,16 @@ Changes in the Python API Changes in the C API -------------------- -* :c:func:`PyObject_Str` now includes a debug assertion that ensures it will - no longer silently discard currently active exceptions. In cases where +* :c:func:`PyEval_EvalFrameEx`, :c:func:`PyObject_Repr(), and + :c:func:`PyObject_Str`, along with some other internal C APIs, now include + a debugging assertion that ensures they are not used in situations where + they may silently discard a currently active exception. In cases where discarding the active exception is expected and desired (for example, - because it has already been saved locally with :c:func:`PyErr_Fetch`), an - explicit :c:func:`PyErr_Clear` call will be needed to avoid triggering the - assertion. + because it has already been saved locally with :c:func:`PyErr_Fetch` or + is being deliberately replaced with a different exception), an explicit + :c:func:`PyErr_Clear` call will be needed to avoid triggering the + assertion when running against a version of Python that is compiled with + assertions enabled. * :c:func:`PyErr_SetImportError` now sets :exc:`TypeError` when its **msg** argument is not set. Previously only ``NULL`` was returned with no exception