From cfeb3b6ab8e213cb3551b101d0566d77f5b47409 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Sun, 3 Mar 2002 21:30:27 +0000 Subject: Patch #50002: Display line information for bad \x escapes: - recognize "SyntaxError"s by the print_file_and_line attribute. - add the syntaxerror attributes to all exceptions in compile.c. Fixes #221791 --- Python/errors.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'Python/errors.c') diff --git a/Python/errors.c b/Python/errors.c index 2799cffc93..13b3d11ed6 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); } -- cgit v1.2.1