class Test(Exception): pass def traceback_list(tb): result = list() while True: result.append(tb) if tb is None: break tb = tb.tb_next return result try: a = Test("thing1") print("a.__traceback__ before raise :", traceback_list(a.__traceback__)) raise a except Exception as a: print("a.__traceback__ after raise :", traceback_list(a.__traceback__)) try: b = Test("thing2").with_traceback(a.__traceback__) tracebacks = traceback_list(b.__traceback__) print("b.__traceback__ before raise :", tracebacks) raise b from a except Exception as b: tracebacks = traceback_list(b.__traceback__) print("b.__traceback__ after raise :", tracebacks) # produces output like: # a.__traceback__ before raise : [None] # a.__traceback__ after raise : [, None] # b.__traceback__ before raise : [, None] # b.__traceback__ after raise : [, , None]