diff options
author | Benjamin Peterson <benjamin@python.org> | 2012-05-15 05:09:31 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2012-05-15 05:09:31 (GMT) |
commit | d5a1c44455d969968f453f029727bfc45e4ce0a9 (patch) | |
tree | 98e91aa8130d600df0b1fdf329bbdc9d60d4b14c /Python/ceval.c | |
parent | d91dc623791fd9973b914a57540d89cb986da7c9 (diff) | |
download | cpython-d5a1c44455d969968f453f029727bfc45e4ce0a9.zip cpython-d5a1c44455d969968f453f029727bfc45e4ce0a9.tar.gz cpython-d5a1c44455d969968f453f029727bfc45e4ce0a9.tar.bz2 |
PEP 415: Implement suppression of __context__ display with an exception attribute
This replaces the original PEP 409 implementation. See #14133.
Diffstat (limited to 'Python/ceval.c')
-rw-r--r-- | Python/ceval.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index b9a006b..718bb32 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -3572,23 +3572,26 @@ do_raise(PyObject *exc, PyObject *cause) if (cause) { PyObject *fixed_cause; - int result; if (PyExceptionClass_Check(cause)) { fixed_cause = PyObject_CallObject(cause, NULL); if (fixed_cause == NULL) goto raise_error; - Py_CLEAR(cause); - } else { - /* Let "exc.__cause__ = cause" handle all further checks */ + Py_DECREF(cause); + } + else if (PyExceptionInstance_Check(cause)) { fixed_cause = cause; - cause = NULL; /* Steal the reference */ } - /* We retain ownership of the reference to fixed_cause */ - result = _PyException_SetCauseChecked(value, fixed_cause); - Py_DECREF(fixed_cause); - if (result < 0) { + else if (cause == Py_None) { + Py_DECREF(cause); + fixed_cause = NULL; + } + else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); goto raise_error; } + PyException_SetCause(value, fixed_cause); } PyErr_SetObject(type, value); |