Commit 04edb528 authored by Guido van Rossum's avatar Guido van Rossum

- Issue #2371: Add a Py3k warning when catching an exception that

  doesn't derive from BaseException.
parent 0bb79508
...@@ -360,6 +360,7 @@ Magnus Kessler ...@@ -360,6 +360,7 @@ Magnus Kessler
Lawrence Kesteloot Lawrence Kesteloot
Vivek Khera Vivek Khera
Mads Kiilerich Mads Kiilerich
Taek Joo Kim
Steve Kirsch Steve Kirsch
Ron Klatchko Ron Klatchko
Bastian Kleineidam Bastian Kleineidam
......
...@@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 2? ...@@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 2?
Core and builtins 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 - Issue #2321: use pymalloc for unicode object string data to reduce
memory usage in some circumstances. memory usage in some circumstances.
......
...@@ -4042,6 +4042,13 @@ assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x) ...@@ -4042,6 +4042,13 @@ assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x)
} }
} }
#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 * static PyObject *
cmp_outcome(int op, register PyObject *v, register PyObject *w) cmp_outcome(int op, register PyObject *v, register PyObject *w)
{ {
...@@ -4079,6 +4086,16 @@ cmp_outcome(int op, register PyObject *v, register PyObject *w) ...@@ -4079,6 +4086,16 @@ cmp_outcome(int op, register PyObject *v, register PyObject *w)
if (ret_val == -1) if (ret_val == -1)
return NULL; 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 { else {
...@@ -4091,6 +4108,16 @@ cmp_outcome(int op, register PyObject *v, register PyObject *w) ...@@ -4091,6 +4108,16 @@ cmp_outcome(int op, register PyObject *v, register PyObject *w)
if (ret_val == -1) if (ret_val == -1)
return NULL; 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); res = PyErr_GivenExceptionMatches(v, w);
break; break;
......
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