On Thu, Sep 8, 2016, at 04:09, Christian Heimes wrote:
> 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.

It's checked by PyErr_Occurred() several lines later.
_______________________________________________
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

Reply via email to