summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2007-01-30 21:34:36 (GMT)
committerBrett Cannon <bcannon@gmail.com>2007-01-30 21:34:36 (GMT)
commit129bd52146c2380a4887c6bbf066113a195c60da (patch)
tree9f4a250df8167eae4bb877cb2a3e85bb83b32b0b /Python/ceval.c
parenta05153683c0712ff62d3bdcc33c879dd49ed7ddc (diff)
downloadcpython-129bd52146c2380a4887c6bbf066113a195c60da.zip
cpython-129bd52146c2380a4887c6bbf066113a195c60da.tar.gz
cpython-129bd52146c2380a4887c6bbf066113a195c60da.tar.bz2
No more raising of string exceptions!
The next step of PEP 352 (for 2.6) causes raising a string exception to trigger a TypeError. Trying to catch a string exception raises a DeprecationWarning. References to string exceptions has been removed from the docs since they are now just an error.
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c47
1 files changed, 34 insertions, 13 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 67eefba..ffdc75b 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2206,8 +2206,9 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
case SETUP_LOOP:
case SETUP_EXCEPT:
case SETUP_FINALLY:
- /* NOTE: If you add any new block-setup opcodes that are not try/except/finally
- handlers, you may need to update the PyGen_NeedsFinalizing() function. */
+ /* NOTE: If you add any new block-setup opcodes that are
+ not try/except/finally handlers, you may need to
+ update the PyGen_NeedsFinalizing() function. */
PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
STACK_LEVEL());
@@ -3069,15 +3070,7 @@ do_raise(PyObject *type, PyObject *value, PyObject *tb)
Py_DECREF(tmp);
}
- if (PyString_CheckExact(type)) {
- /* Raising builtin string is deprecated but still allowed --
- * do nothing. Raising an instance of a new-style str
- * subclass is right out. */
- if (PyErr_Warn(PyExc_DeprecationWarning,
- "raising a string exception is deprecated"))
- goto raise_error;
- }
- else if (PyExceptionClass_Check(type))
+ if (PyExceptionClass_Check(type))
PyErr_NormalizeException(&type, &value, &tb);
else if (PyExceptionInstance_Check(type)) {
@@ -3099,8 +3092,7 @@ do_raise(PyObject *type, PyObject *value, PyObject *tb)
/* Not something you can raise. You get an exception
anyway, just not what you specified :-) */
PyErr_Format(PyExc_TypeError,
- "exceptions must be classes, instances, or "
- "strings (deprecated), not %s",
+ "exceptions must be classes or instances, not %s",
type->ob_type->tp_name);
goto raise_error;
}
@@ -3985,6 +3977,35 @@ cmp_outcome(int op, register PyObject *v, register PyObject *w)
res = !res;
break;
case PyCmp_EXC_MATCH:
+ if (PyTuple_Check(w)) {
+ Py_ssize_t i, length;
+ length = PyTuple_Size(w);
+ for (i = 0; i < length; i += 1) {
+ PyObject *exc = PyTuple_GET_ITEM(w, i);
+ if (PyString_Check(exc)) {
+ int ret_val;
+ ret_val = PyErr_WarnEx(
+ PyExc_DeprecationWarning,
+ "catching of string "
+ "exceptions is "
+ "deprecated", 1);
+ if (ret_val == -1)
+ return NULL;
+ }
+ }
+ }
+ else {
+ if (PyString_Check(w)) {
+ int ret_val;
+ ret_val = PyErr_WarnEx(
+ PyExc_DeprecationWarning,
+ "catching of string "
+ "exceptions is deprecated",
+ 1);
+ if (ret_val == -1)
+ return NULL;
+ }
+ }
res = PyErr_GivenExceptionMatches(v, w);
break;
default: