PEP 352 implementation. Creates a new base class, BaseException, which has an
added message attribute compared to the previous version of Exception. It is
also a new-style class, making all exceptions now new-style. KeyboardInterrupt
and SystemExit inherit from BaseException directly. String exceptions now
raise DeprecationWarning.
Applies patch 1104669, and closes bugs 1012952 and 518846.
diff --git a/Objects/genobject.c b/Objects/genobject.c
index 8b84e2e..c24c3ce 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -230,11 +230,11 @@
Py_XINCREF(val);
Py_XINCREF(tb);
- if (PyClass_Check(typ)) {
+ if (PyExceptionClass_Check(typ)) {
PyErr_NormalizeException(&typ, &val, &tb);
}
- else if (PyInstance_Check(typ)) {
+ else if (PyExceptionInstance_Check(typ)) {
/* Raising an instance. The value should be a dummy. */
if (val && val != Py_None) {
PyErr_SetString(PyExc_TypeError,
@@ -245,7 +245,7 @@
/* Normalize to raise <class>, <instance> */
Py_XDECREF(val);
val = typ;
- typ = (PyObject*) ((PyInstanceObject*)typ)->in_class;
+ typ = PyExceptionInstance_Class(typ);
Py_INCREF(typ);
}
}