Skip to content

Commit 78062e0

Browse files
bpo-37961: Fix regression in tracemalloc.Traceback.__repr__ (GH-23805)
Regression in 8d59eb1. (cherry picked from commit 051b981) Co-authored-by: Daniel Hahler <[email protected]>
1 parent 1662868 commit 78062e0

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

Lib/test/test_tracemalloc.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,25 @@ def traceback_filename(filename):
8484
return traceback_lineno(filename, 0)
8585

8686

87+
class TestTraceback(unittest.TestCase):
88+
def test_repr(self):
89+
def get_repr(*args) -> str:
90+
return repr(tracemalloc.Traceback(*args))
91+
92+
self.assertEqual(get_repr(()), "<Traceback ()>")
93+
self.assertEqual(get_repr((), 0), "<Traceback () total_nframe=0>")
94+
95+
frames = (("f1", 1), ("f2", 2))
96+
exp_repr_frames = (
97+
"(<Frame filename='f2' lineno=2>,"
98+
" <Frame filename='f1' lineno=1>)"
99+
)
100+
self.assertEqual(get_repr(frames),
101+
f"<Traceback {exp_repr_frames}>")
102+
self.assertEqual(get_repr(frames, 2),
103+
f"<Traceback {exp_repr_frames} total_nframe=2>")
104+
105+
87106
class TestTracemallocEnabled(unittest.TestCase):
88107
def setUp(self):
89108
if tracemalloc.is_tracing():
@@ -1064,6 +1083,7 @@ def test_stop_untrack(self):
10641083

10651084
def test_main():
10661085
support.run_unittest(
1086+
TestTraceback,
10671087
TestTracemallocEnabled,
10681088
TestSnapshot,
10691089
TestFilters,

Lib/tracemalloc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ def __str__(self):
226226
return str(self[0])
227227

228228
def __repr__(self):
229-
s = "<Traceback %r" % tuple(self)
229+
s = f"<Traceback {tuple(self)}"
230230
if self._total_nframe is None:
231231
s += ">"
232232
else:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix crash in :func:`tracemalloc.Traceback.__repr__` (regressed in Python 3.9).

0 commit comments

Comments
 (0)