[Python-Dev] cpython (3.5): supress coroutine warning when an exception is pending (#27968)
Christian Heimes
christian at python.org
Thu Sep 8 07:09:48 EDT 2016
On 2016-09-07 17:47, benjamin.peterson wrote:
> 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);
> + }
You don't check the return value of PyErr_WarnFormat(). It does not
signal an exception in case warnings are turned into exceptions.
Christian
More information about the Python-Dev
mailing list