From bee071221419795d707a15286e08424d141a6ca6 Mon Sep 17 00:00:00 2001 From: "Phillip J. Eby" Date: Sat, 25 Mar 2006 00:05:50 +0000 Subject: [PATCH] Support throw() of string exceptions. --- Lib/test/test_generators.py | 6 ++++-- Objects/genobject.c | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) 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",