From 043417b58257b95876679f592bdc16389ba7476f Mon Sep 17 00:00:00 2001 From: rdb Date: Sat, 5 Aug 2023 16:37:01 +0200 Subject: [PATCH] event: Replace _PyGen_FetchStopIterationValue in Python 3.13+ See python/cpython#106320 and python/cpython#107032 Closes #1526 --- src/event/pythonTask.cxx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/event/pythonTask.cxx b/src/event/pythonTask.cxx index f214ee73d..b6f540fbd 100644 --- a/src/event/pythonTask.cxx +++ b/src/event/pythonTask.cxx @@ -545,7 +545,17 @@ do_python_task() { Py_DECREF(_generator); _generator = nullptr; -#if PY_VERSION_HEX >= 0x03030000 +#if PY_VERSION_HEX >= 0x030D0000 // Python 3.13 + // Python 3.13 does not support _PyGen_FetchStopIterationValue anymore. + if (PyErr_ExceptionMatches(PyExc_StopIteration)) { + PyObject *exc = PyErr_GetRaisedException(); + result = ((PyStopIterationObject *)exc)->value; + if (result == nullptr) { + result = Py_None; + } + Py_INCREF(result); + Py_DECREF(exc); +#elif PY_VERSION_HEX >= 0x03030000 if (_PyGen_FetchStopIterationValue(&result) == 0) { #else if (PyErr_ExceptionMatches(PyExc_StopIteration)) {