diff options
-rw-r--r-- | Lib/test/test_tracemalloc.py | 20 | ||||
-rw-r--r-- | Lib/tracemalloc.py | 2 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-12-16-16-16-33.bpo-37961.jrESEq.rst | 1 |
3 files changed, 22 insertions, 1 deletions
diff --git a/Lib/test/test_tracemalloc.py b/Lib/test/test_tracemalloc.py index a0037f8..5566567 100644 --- a/Lib/test/test_tracemalloc.py +++ b/Lib/test/test_tracemalloc.py @@ -85,6 +85,25 @@ def traceback_filename(filename): return traceback_lineno(filename, 0) +class TestTraceback(unittest.TestCase): + def test_repr(self): + def get_repr(*args) -> str: + return repr(tracemalloc.Traceback(*args)) + + self.assertEqual(get_repr(()), "<Traceback ()>") + self.assertEqual(get_repr((), 0), "<Traceback () total_nframe=0>") + + frames = (("f1", 1), ("f2", 2)) + exp_repr_frames = ( + "(<Frame filename='f2' lineno=2>," + " <Frame filename='f1' lineno=1>)" + ) + self.assertEqual(get_repr(frames), + f"<Traceback {exp_repr_frames}>") + self.assertEqual(get_repr(frames, 2), + f"<Traceback {exp_repr_frames} total_nframe=2>") + + class TestTracemallocEnabled(unittest.TestCase): def setUp(self): if tracemalloc.is_tracing(): @@ -1065,6 +1084,7 @@ class TestCAPI(unittest.TestCase): def test_main(): support.run_unittest( + TestTraceback, TestTracemallocEnabled, TestSnapshot, TestFilters, diff --git a/Lib/tracemalloc.py b/Lib/tracemalloc.py index 69b4170..cec99c5 100644 --- a/Lib/tracemalloc.py +++ b/Lib/tracemalloc.py @@ -226,7 +226,7 @@ class Traceback(Sequence): return str(self[0]) def __repr__(self): - s = "<Traceback %r" % tuple(self) + s = f"<Traceback {tuple(self)}" if self._total_nframe is None: s += ">" else: diff --git a/Misc/NEWS.d/next/Library/2020-12-16-16-16-33.bpo-37961.jrESEq.rst b/Misc/NEWS.d/next/Library/2020-12-16-16-16-33.bpo-37961.jrESEq.rst new file mode 100644 index 0000000..5b363ad --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-12-16-16-16-33.bpo-37961.jrESEq.rst @@ -0,0 +1 @@ +Fix crash in :func:`tracemalloc.Traceback.__repr__` (regressed in Python 3.9).
\ No newline at end of file |