[Python-checkins] cpython (3.5): supress coroutine warning when an exception is pending (#27968)
benjamin.peterson
python-checkins at python.org
Wed Sep 7 11:47:51 EDT 2016
https://hg.python.org/cpython/rev/234f758449f8
changeset: 103223:234f758449f8
branch: 3.5
parent: 103213:7537ca1c2aaf
user: Benjamin Peterson <benjamin at python.org>
date: Wed Sep 07 08:46:59 2016 -0700
summary:
supress coroutine warning when an exception is pending (#27968)
files:
Objects/genobject.c | 27 +++++++++++++++------------
1 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/Objects/genobject.c b/Objects/genobject.c
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -21,7 +21,7 @@
_PyGen_Finalize(PyObject *self)
{
PyGenObject *gen = (PyGenObject *)self;
- PyObject *res;
+ PyObject *res = NULL;
PyObject *error_type, *error_value, *error_traceback;
if (gen->gi_frame == NULL || gen->gi_frame->f_stacktop == NULL)
@@ -33,23 +33,26 @@
/* If `gen` is a coroutine, and if it was never awaited on,
issue a RuntimeWarning. */
- if (gen->gi_code != NULL
- && ((PyCodeObject *)gen->gi_code)->co_flags & CO_COROUTINE
- && gen->gi_frame->f_lasti == -1
- && !PyErr_Occurred()
- && PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
- "coroutine '%.50S' was never awaited",
- gen->gi_qualname)) {
- res = NULL; /* oops, exception */
+ if (gen->gi_code != NULL &&
+ ((PyCodeObject *)gen->gi_code)->co_flags & CO_COROUTINE &&
+ gen->gi_frame->f_lasti == -1) {
+ if (!error_value) {
+ PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
+ "coroutine '%.50S' was never awaited",
+ gen->gi_qualname);
+ }
}
else {
res = gen_close(gen, NULL);
}
- if (res == NULL)
- PyErr_WriteUnraisable(self);
- else
+ if (res == NULL) {
+ if (PyErr_Occurred())
+ PyErr_WriteUnraisable(self);
+ }
+ else {
Py_DECREF(res);
+ }
/* Restore the saved exception. */
PyErr_Restore(error_type, error_value, error_traceback);
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list