diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2011-10-12 17:39:57 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2011-10-12 17:39:57 (GMT) |
commit | 5d6fbe82078fe67437755bccfa504dbbcf909a74 (patch) | |
tree | 25a147fb6ca753fc0dd7ecc55543f2cce708b313 /Python | |
parent | 1e4fe702f60b1bf8ed2e3ddca0ea634d83cca89b (diff) | |
download | cpython-5d6fbe82078fe67437755bccfa504dbbcf909a74.zip cpython-5d6fbe82078fe67437755bccfa504dbbcf909a74.tar.gz cpython-5d6fbe82078fe67437755bccfa504dbbcf909a74.tar.bz2 |
Instantiate the OS-related exception as soon as we raise it, so that
"except" works properly.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/errors.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/Python/errors.c b/Python/errors.c index 6e69d23..5988e1b 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -341,7 +341,7 @@ PyObject * PyErr_SetFromErrnoWithFilenameObject(PyObject *exc, PyObject *filenameObject) { PyObject *message; - PyObject *v; + PyObject *v, *args; int i = errno; #ifndef MS_WINDOWS char *s; @@ -410,14 +410,18 @@ PyErr_SetFromErrnoWithFilenameObject(PyObject *exc, PyObject *filenameObject) } if (filenameObject != NULL) - v = Py_BuildValue("(iOO)", i, message, filenameObject); + args = Py_BuildValue("(iOO)", i, message, filenameObject); else - v = Py_BuildValue("(iO)", i, message); + args = Py_BuildValue("(iO)", i, message); Py_DECREF(message); - if (v != NULL) { - PyErr_SetObject(exc, v); - Py_DECREF(v); + if (args != NULL) { + v = PyObject_Call(exc, args, NULL); + Py_DECREF(args); + if (v != NULL) { + PyErr_SetObject((PyObject *) Py_TYPE(v), v); + Py_DECREF(v); + } } #ifdef MS_WINDOWS LocalFree(s_buf); |