ipython
ipython copied to clipboard
Fix showing SystemExit exception raise inside except handler
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
It looks like the failing tests are there on main as well; they don't look like anything related to this PR.
Thanks !