ipython icon indicating copy to clipboard operation
ipython copied to clipboard

Fix showing SystemExit exception raise inside except handler

Open takluyver opened this issue 1 year ago • 1 comments
trafficstars

Doing something like this:

try:
    5 / 0
except Exception as e:
    raise SystemExit

was hitting an error inside UltraTB, creating a long traceback of its internals (which, ironically, UltraTB itself then displays correctly :-).

ListTB.get_exception_only() calls the ListTB.structured_traceback() method specifically - even if self is a subclass, it won't use the subclass's method. However, the exception chaining in that method uses recursion by calling self.structured_traceback(), which will use a subclass's method. Tuples were added as an option there to support exception chaining, but not all of the machinery in connected classes expects a tuple.

This just skips the exception chaining logic for the etb=None case, when we're showing the exception only. I'm not sure this is necessarily the best fix, but I didn't want to spend too much time following code around a module that's old enough to vote.

Closes #12104

takluyver avatar Aug 26 '24 12:08 takluyver

It looks like the failing tests are there on main as well; they don't look like anything related to this PR.

takluyver avatar Aug 26 '24 12:08 takluyver

Thanks !

Carreau avatar Aug 29 '24 08:08 Carreau