Returns a string for printing one of the frames involved in the stack.
This method gets called for each frame object to be printed in the
- :class:`StackSummary`.
+ :class:`StackSummary`. If it returns ``None``, the frame is omitted
+ from the output.
.. versionadded:: 3.11
s.format(),
[f'{__file__}:{some_inner.__code__.co_firstlineno + 1}'])
+ def test_dropping_frames(self):
+ def f():
+ 1/0
+
+ def g():
+ try:
+ f()
+ except:
+ return sys.exc_info()
+
+ exc_info = g()
+
+ class Skip_G(traceback.StackSummary):
+ def format_frame(self, frame):
+ if frame.name == 'g':
+ return None
+ return super().format_frame(frame)
+
+ stack = Skip_G.extract(
+ traceback.walk_tb(exc_info[2])).format()
+
+ self.assertEqual(len(stack), 1)
+ lno = f.__code__.co_firstlineno + 1
+ self.assertEqual(
+ stack[0],
+ f' File "{__file__}", line {lno}, in f\n 1/0\n'
+ )
+
class TestTracebackException(unittest.TestCase):
last_name = None
count = 0
for frame in self:
+ formatted_frame = self.format_frame(frame)
+ if formatted_frame is None:
+ continue
if (last_file is None or last_file != frame.filename or
last_line is None or last_line != frame.lineno or
last_name is None or last_name != frame.name):