Commit a11d92eb authored by Stefan Behnel's avatar Stefan Behnel

merge 0.19.x branch into master

parents 8f641227 a6195f1a
...@@ -135,7 +135,6 @@ raise_error: ...@@ -135,7 +135,6 @@ raise_error:
#else /* Python 3+ */ #else /* Python 3+ */
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
PyObject* owned_instance = NULL;
if (tb == Py_None) { if (tb == Py_None) {
tb = 0; tb = 0;
} else if (tb && !PyTraceBack_Check(tb)) { } else if (tb && !PyTraceBack_Check(tb)) {
...@@ -143,11 +142,9 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject ...@@ -143,11 +142,9 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
"raise: arg 3 must be a traceback or None"); "raise: arg 3 must be a traceback or None");
goto bad; goto bad;
} }
if (value == Py_None)
value = 0;
if (PyExceptionInstance_Check(type)) { if (PyExceptionInstance_Check(type)) {
if (value) { if (value && value != Py_None) {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,
"instance exception may not have a separate value"); "instance exception may not have a separate value");
goto bad; goto bad;
...@@ -156,21 +153,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject ...@@ -156,21 +153,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
type = (PyObject*) Py_TYPE(value); type = (PyObject*) Py_TYPE(value);
} else if (PyExceptionClass_Check(type)) { } else if (PyExceptionClass_Check(type)) {
// instantiate the type now (we don't know when and how it will be caught) // instantiate the type now (we don't know when and how it will be caught)
PyObject *args; PyErr_NormalizeException(&type, &value, &tb);
if (!value)
args = PyTuple_New(0);
else if (PyTuple_Check(value)) {
Py_INCREF(value);
args = value;
} else
args = PyTuple_Pack(1, value);
if (!args)
goto bad;
owned_instance = PyEval_CallObject(type, args);
Py_DECREF(args);
if (!owned_instance)
goto bad;
value = owned_instance;
if (!PyExceptionInstance_Check(value)) { if (!PyExceptionInstance_Check(value)) {
PyErr_Format(PyExc_TypeError, PyErr_Format(PyExc_TypeError,
"calling %R should have returned an instance of " "calling %R should have returned an instance of "
...@@ -222,7 +205,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject ...@@ -222,7 +205,6 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
} }
bad: bad:
Py_XDECREF(owned_instance);
return; return;
} }
#endif #endif
......
import sys
class MyError(Exception):
def __init__(self, name, var):
self.name = name
self.var = var
def reraise_explicitly():
"""
>>> try: reraise_explicitly()
... except MyError: print("RAISED!")
... else: print("NOT RAISED!")
RAISED!
"""
try:
raise MyError('Oh no!', 42)
except MyError:
tmp = sys.exc_info()
raise tmp[0], tmp[1], tmp[2]
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment