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 <benja...@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 _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com