mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Instantiate the OS-related exception as soon as we raise it, so that
"except" works properly.
This commit is contained in:
parent
1e4fe702f6
commit
5d6fbe8207
2 changed files with 22 additions and 6 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue