Skip to content

Commit 051b981

Browse files
authored
bpo-37961: Fix regression in tracemalloc.Traceback.__repr__ (GH-23805)
Regression in 8d59eb1.
1 parent 66d3b58 commit 051b981

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
@@ -85,6 +85,25 @@ def traceback_filename(filename):
8585
return traceback_lineno(filename, 0)
8686

8787

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

10661085
def test_main():
10671086
support.run_unittest(
1087+
TestTraceback,
10681088
TestTracemallocEnabled,
10691089
TestSnapshot,
10701090
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)