diff options
author | Brett Cannon <bcannon@gmail.com> | 2007-01-30 21:34:36 (GMT) |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2007-01-30 21:34:36 (GMT) |
commit | 129bd52146c2380a4887c6bbf066113a195c60da (patch) | |
tree | 9f4a250df8167eae4bb877cb2a3e85bb83b32b0b /Python | |
parent | a05153683c0712ff62d3bdcc33c879dd49ed7ddc (diff) | |
download | cpython-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')
-rw-r--r-- | Python/ceval.c | 47 |
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: |