Kaydet (Commit) 04edb528 authored tarafından Guido van Rossum's avatar Guido van Rossum

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

  doesn't derive from BaseException.
üst 0bb79508
......@@ -360,6 +360,7 @@ Magnus Kessler
Lawrence Kesteloot
Vivek Khera
Mads Kiilerich
Taek Joo Kim
Steve Kirsch
Ron Klatchko
Bastian Kleineidam
......
......@@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 2?
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.
......
......@@ -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 *
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)
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 {
......@@ -4091,6 +4108,16 @@ cmp_outcome(int op, register PyObject *v, register PyObject *w)
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;
......
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