diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py index 4be1b4c5252..6b9b4913508 100644 --- a/Lib/test/test_generators.py +++ b/Lib/test/test_generators.py @@ -1545,6 +1545,9 @@ caught ValueError (1) >>> g.throw(ValueError, TypeError(1)) # mismatched type, rewrapped caught ValueError (1) +>>> g.throw(ValueError, ValueError(1), None) # explicit None traceback +caught ValueError (1) + >>> g.throw(ValueError(1), "foo") # bad args Traceback (most recent call last): ... @@ -1592,8 +1595,7 @@ ValueError: 7 >>> f().throw("abc") # throw on just-opened generator Traceback (most recent call last): ... -TypeError: exceptions must be classes, or instances, not str - +abc Now let's try closing a generator: diff --git a/Objects/genobject.c b/Objects/genobject.c index 3f6ef859eed..e7b8f8754a1 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -249,7 +249,10 @@ gen_throw(PyGenObject *gen, PyObject *args) Py_INCREF(typ); } } - else { + + /* Allow raising builtin string exceptions */ + + else if (!PyString_CheckExact(typ)) { /* Not something you can raise. throw() fails. */ PyErr_Format(PyExc_TypeError, "exceptions must be classes, or instances, not %s",