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
|
@ -32,7 +32,7 @@ Core and Builtins
|
||||||
functionality formerly known as raw_input(); the name raw_input()
|
functionality formerly known as raw_input(); the name raw_input()
|
||||||
is no longer defined.
|
is no longer defined.
|
||||||
|
|
||||||
- Objects listed in an 'except' clause must inherit from BaseException.
|
- Classes listed in an 'except' clause must inherit from BaseException.
|
||||||
|
|
||||||
- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
|
- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
|
||||||
and .keys(), .items(), .values() return dict views.
|
and .keys(), .items(), .values() return dict views.
|
||||||
|
|
|
@ -3895,23 +3895,8 @@ assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
#define CANNOT_CATCH_MSG "catching classes that do not inherit from"\
|
||||||
Return a true value if the exception is allowed to be in an 'except' clause,
|
"BaseException is not allowed"
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
cmp_outcome(int op, register PyObject *v, register PyObject *w)
|
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);
|
length = PyTuple_Size(w);
|
||||||
for (i = 0; i < length; i += 1) {
|
for (i = 0; i < length; i += 1) {
|
||||||
PyObject *exc = PyTuple_GET_ITEM(w, i);
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!can_catch_exc(w)) {
|
if (!PyExceptionClass_Check(w)) {
|
||||||
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
CANNOT_CATCH_MSG);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue