diff options
author | Batuhan Taskaya <batuhan@python.org> | 2021-07-24 17:50:39 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-24 17:50:39 (GMT) |
commit | 4f5980a4f57dab68b9137304f58bd08891d43d5a (patch) | |
tree | 2bb29a0f309794d1ceb270647a3a5b66c908f479 /Lib | |
parent | ef8b8535cb3cd705392af9b927d6ff336d98427d (diff) | |
download | cpython-4f5980a4f57dab68b9137304f58bd08891d43d5a.zip cpython-4f5980a4f57dab68b9137304f58bd08891d43d5a.tar.gz cpython-4f5980a4f57dab68b9137304f58bd08891d43d5a.tar.bz2 |
bpo-43950: support long lines in traceback.py (GH-27336)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_traceback.py | 22 | ||||
-rw-r--r-- | Lib/traceback.py | 6 |
2 files changed, 27 insertions, 1 deletions
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index c87ce72..5fc5b59 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -510,6 +510,28 @@ class TracebackErrorLocationCaretTests(unittest.TestCase): ) self.assertEqual(result_lines, expected_error.splitlines()) + def test_traceback_very_long_line(self): + source = "a" * 256 + bytecode = compile(source, TESTFN, "exec") + + with open(TESTFN, "w") as file: + file.write(source) + self.addCleanup(unlink, TESTFN) + + func = partial(exec, bytecode) + result_lines = self.get_exception(func) + + lineno_f = bytecode.co_firstlineno + expected_error = ( + 'Traceback (most recent call last):\n' + f' File "{__file__}", line {self.callable_line}, in get_exception\n' + ' callable()\n' + ' ^^^^^^^^^^\n' + f' File "{TESTFN}", line {lineno_f}, in <module>\n' + f' {source}\n' + ) + self.assertEqual(result_lines, expected_error.splitlines()) + def assertSpecialized(self, func, expected_specialization): result_lines = self.get_exception(func) specialization_line = result_lines[-1] diff --git a/Lib/traceback.py b/Lib/traceback.py index ae5775d..15bdb3c 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -462,7 +462,11 @@ class StackSummary(list): row.append(' {}\n'.format(frame.line.strip())) stripped_characters = len(frame._original_line) - len(frame.line.lstrip()) - if frame.end_lineno == frame.lineno and frame.end_colno != 0: + if ( + frame.end_lineno == frame.lineno + and frame.colno is not None + and frame.end_colno is not None + ): colno = _byte_offset_to_character_offset(frame._original_line, frame.colno) end_colno = _byte_offset_to_character_offset(frame._original_line, frame.end_colno) |