Core and builtins
-----------------
+- Issue #2371: Add a Py3k warning when catching an exception that
+ doesn't derive from BaseException.
+
- Issue #2321: use pymalloc for unicode object string data to reduce
memory usage in some circumstances.
}
}
+#define Py3kExceptionClass_Check(x) \
+ (PyType_Check((x)) && \
+ PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
+
+#define CANNOT_CATCH_MSG "catching classes that don't inherit from " \
+ "BaseException is not allowed in 3.x."
+
static PyObject *
cmp_outcome(int op, register PyObject *v, register PyObject *w)
{
if (ret_val == -1)
return NULL;
}
+ if (Py_Py3kWarningFlag &&
+ !Py3kExceptionClass_Check(exc))
+ {
+ int ret_val;
+ ret_val = PyErr_WarnEx(
+ PyExc_DeprecationWarning,
+ CANNOT_CATCH_MSG, 1);
+ if (ret_val == -1)
+ return NULL;
+ }
}
}
else {
if (ret_val == -1)
return NULL;
}
+ if (Py_Py3kWarningFlag &&
+ !Py3kExceptionClass_Check(w))
+ {
+ int ret_val;
+ ret_val = PyErr_WarnEx(
+ PyExc_DeprecationWarning,
+ CANNOT_CATCH_MSG, 1);
+ if (ret_val == -1)
+ return NULL;
+ }
}
res = PyErr_GivenExceptionMatches(v, w);
break;