diff options
Diffstat (limited to 'Python/errors.c')
-rw-r--r-- | Python/errors.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/Python/errors.c b/Python/errors.c index 2799cff..13b3d11 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -561,7 +561,9 @@ PyErr_WarnExplicit(PyObject *category, char *message, } -/* XXX There's a comment missing here */ +/* Set file and line information for the current exception. + If the exception is not a SyntaxError, also sets additional attributes + to make printing of exceptions believe it is a syntax error. */ void PyErr_SyntaxLocation(char *filename, int lineno) @@ -596,6 +598,26 @@ PyErr_SyntaxLocation(char *filename, int lineno) Py_DECREF(tmp); } } + if (PyObject_SetAttrString(v, "offset", Py_None)) { + PyErr_Clear(); + } + if (exc != PyExc_SyntaxError) { + if (!PyObject_HasAttrString(v, "msg")) { + tmp = PyObject_Str(v); + if (tmp) { + if (PyObject_SetAttrString(v, "msg", tmp)) + PyErr_Clear(); + Py_DECREF(tmp); + } else { + PyErr_Clear(); + } + } + if (!PyObject_HasAttrString(v, "print_file_and_line")) { + if (PyObject_SetAttrString(v, "print_file_and_line", + Py_None)) + PyErr_Clear(); + } + } PyErr_Restore(exc, v, tb); } |