Skip to content

Commit ec7c17e

Browse files
authored
bpo-46510: Add missing test for types.TracebackType/FrameType. Calculate them directly from the caught exception. (GH-30880)
1 parent d69d3d8 commit ec7c17e

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

Lib/test/test_types.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,14 @@ def test_notimplemented_type(self):
624624
def test_none_type(self):
625625
self.assertIsInstance(None, types.NoneType)
626626

627+
def test_traceback_and_frame_types(self):
628+
try:
629+
raise OSError
630+
except OSError as e:
631+
exc = e
632+
self.assertIsInstance(exc.__traceback__, types.TracebackType)
633+
self.assertIsInstance(exc.__traceback__.tb_frame, types.FrameType)
634+
627635

628636
class UnionTests(unittest.TestCase):
629637

Lib/types.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,9 @@ def _m(self): pass
5252

5353
try:
5454
raise TypeError
55-
except TypeError:
56-
tb = sys.exc_info()[2]
57-
TracebackType = type(tb)
58-
FrameType = type(tb.tb_frame)
59-
tb = None; del tb
55+
except TypeError as exc:
56+
TracebackType = type(exc.__traceback__)
57+
FrameType = type(exc.__traceback__.tb_frame)
6058

6159
# For Jython, the following two types are identical
6260
GetSetDescriptorType = type(FunctionType.__code__)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Add missing test for :class:`types.TracebackType` and
2+
:class:`types.FrameType`. Calculate them directly from the caught exception
3+
without calling :func:`sys.exc_info`.

0 commit comments

Comments
 (0)