mirror of
https://github.com/python/cpython.git
synced 2025-10-21 14:12:27 +00:00
Make it so TypeError is raised if an instance of an object is put in an
'except' clause. Also refactor some code to help keep Neal Norwitz happy.
This commit is contained in:
parent
81fe341508
commit
3959046903
2 changed files with 9 additions and 20 deletions
|
@ -3895,23 +3895,8 @@ assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Return a true value if the exception is allowed to be in an 'except' clause,
|
||||
otherwise return a false value.
|
||||
*/
|
||||
static int
|
||||
can_catch_exc(PyObject *exc)
|
||||
{
|
||||
if (!(PyExceptionClass_Check(exc) || PyExceptionInstance_Check(exc))) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"catching an object must be a class or "
|
||||
"instance of BaseException");
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
#define CANNOT_CATCH_MSG "catching classes that do not inherit from"\
|
||||
"BaseException is not allowed"
|
||||
|
||||
static PyObject *
|
||||
cmp_outcome(int op, register PyObject *v, register PyObject *w)
|
||||
|
@ -3941,13 +3926,17 @@ cmp_outcome(int op, register PyObject *v, register PyObject *w)
|
|||
length = PyTuple_Size(w);
|
||||
for (i = 0; i < length; i += 1) {
|
||||
PyObject *exc = PyTuple_GET_ITEM(w, i);
|
||||
if (!can_catch_exc(exc)) {
|
||||
if (!PyExceptionClass_Check(exc)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
CANNOT_CATCH_MSG);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!can_catch_exc(w)) {
|
||||
if (!PyExceptionClass_Check(w)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
CANNOT_CATCH_MSG);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue