diff options
author | Daniel Hahler <git@thequod.de> | 2020-12-16 21:38:32 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-16 21:38:32 (GMT) |
commit | 051b9818671625d125dee8198e0d2af5ad4c85b8 (patch) | |
tree | 472f877a688381cdd95312919c1920f7d4fd6448 | |
parent | 66d3b589c44fcbcf9afe1e442d9beac3bd8bcd34 (diff) | |
download | cpython-051b9818671625d125dee8198e0d2af5ad4c85b8.zip cpython-051b9818671625d125dee8198e0d2af5ad4c85b8.tar.gz cpython-051b9818671625d125dee8198e0d2af5ad4c85b8.tar.bz2 |
bpo-37961: Fix regression in tracemalloc.Traceback.__repr__ (GH-23805)
Regression in 8d59eb1b66c51b2b918da9881c57d07d08df43b7.
-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 |