diff options
-rw-r--r-- | Lib/test/test_traceback.py | 4 | ||||
-rw-r--r-- | Python/pythonrun.c | 7 |
2 files changed, 7 insertions, 4 deletions
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index d39322f..b2c7262 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -302,6 +302,10 @@ class BaseExceptionReportingTests: raise SyntaxError('', ('', 0, 5, 'hello')) msg = self.get_report(e).splitlines() self.assertEqual(msg[-2], " ^") + def e(): + exec("x = 5 | 4 |") + msg = self.get_report(e).splitlines() + self.assertEqual(msg[-2], ' ^') class PyExcReportingTests(BaseExceptionReportingTests, unittest.TestCase): diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 10a1d50..3dbe754 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -1299,6 +1299,8 @@ print_error_text(PyObject *f, int offset, const char *text) { char *nl; if (offset >= 0) { + if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n') + offset--; for (;;) { nl = strchr(text, '\n'); if (nl == NULL || nl-text >= offset) @@ -1318,11 +1320,8 @@ print_error_text(PyObject *f, int offset, const char *text) if (offset == -1) return; PyFile_WriteString(" ", f); - offset--; - while (offset > 0) { + while (--offset > 0) PyFile_WriteString(" ", f); - offset--; - } PyFile_WriteString("^\n", f); } |