summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2007-02-26 22:01:14 (GMT)
committerBrett Cannon <bcannon@gmail.com>2007-02-26 22:01:14 (GMT)
commit39590469030b05f976bc1265f1598bd469c14449 (patch)
treedef4a15c94ab7fcb826e60f328066e5a924ea886
parent81fe3415083b4736b848519294270801ab53d59a (diff)
downloadcpython-39590469030b05f976bc1265f1598bd469c14449.zip
cpython-39590469030b05f976bc1265f1598bd469c14449.tar.gz
cpython-39590469030b05f976bc1265f1598bd469c14449.tar.bz2
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.
-rw-r--r--Misc/NEWS2
-rw-r--r--Python/ceval.c27
2 files changed, 9 insertions, 20 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index 4eb2f47..8ffbe45 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -32,7 +32,7 @@ Core and Builtins
functionality formerly known as raw_input(); the name raw_input()
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;
and .keys(), .items(), .values() return dict views.
diff --git a/Python/ceval.c b/Python/ceval.c
index fe5de03..5cad632 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -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;
}
}