summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_asyncio/test_futures.py2
-rw-r--r--Misc/NEWS.d/next/Library/2023-01-25-18-07-20.gh-issue-101326.KL4SFv.rst1
-rw-r--r--Modules/_asynciomodule.c7
3 files changed, 9 insertions, 1 deletions
diff --git a/Lib/test/test_asyncio/test_futures.py b/Lib/test/test_asyncio/test_futures.py
index 56b0b86..2184b20 100644
--- a/Lib/test/test_asyncio/test_futures.py
+++ b/Lib/test/test_asyncio/test_futures.py
@@ -612,6 +612,8 @@ class BaseFutureTests:
Exception, Exception("elephant"), 32)
self.assertRaises(TypeError, fi.throw,
Exception("elephant"), Exception("elephant"))
+ # https://github.com/python/cpython/issues/101326
+ self.assertRaises(ValueError, fi.throw, ValueError, None, None)
self.assertRaises(TypeError, fi.throw, list)
def test_future_del_collect(self):
diff --git a/Misc/NEWS.d/next/Library/2023-01-25-18-07-20.gh-issue-101326.KL4SFv.rst b/Misc/NEWS.d/next/Library/2023-01-25-18-07-20.gh-issue-101326.KL4SFv.rst
new file mode 100644
index 0000000..54b69b9
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-01-25-18-07-20.gh-issue-101326.KL4SFv.rst
@@ -0,0 +1 @@
+Fix regression when passing ``None`` as second or third argument to ``FutureIter.throw``.
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c
index 6fe4ca4..055dded 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -1694,7 +1694,12 @@ FutureIter_throw(futureiterobject *self, PyObject *const *args, Py_ssize_t nargs
val = args[1];
}
- if (tb != NULL && !PyTraceBack_Check(tb)) {
+ if (val == Py_None) {
+ val = NULL;
+ }
+ if (tb == Py_None ) {
+ tb = NULL;
+ } else if (tb != NULL && !PyTraceBack_Check(tb)) {
PyErr_SetString(PyExc_TypeError, "throw() third argument must be a traceback");
return NULL;
}