Ethan Furman <et...@stoneleaf.us> added the comment:
I think the way forward is going to be a recursive walk back to the first exception, and if __suppress_context__ is true for any exception then only the previous exception is omitted. For example, the above example had the following chain: Exception __context__ __cause__ __suppress_context__ --------- ----------- --------- -------------------- TypeError: None None False KeyError: TypeError None False KeyError: KeyError None True When walking the stack to decide which items get printed, the final KeyError is printed (obviously, as it's the last one), but because its __suppress_context__ is True then the immediately preceding exception, the first KeyError, is skipped; however, the first KeyError's __suppress_context__ is False, so we do print its __context__, which is the TypeError. Giving us a traceback similar to: --------------------------------------------------------------------- Traceback (most recent call last): TypeError: str expected, not type During handling of the above exception, another exception occurred: Traceback (most recent call last): KeyError: 'NEW_VARIABLE' --------------------------------------------------------------------- Which is entirely correct. In cases where NewException has it's __cause__ set, we should print that as normal, then keep following the NewException.__context__ chain (with some kind of verbage or visual indicator between the __context__ and the __cause__). ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue39725> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com