try: Exception().__cause__ except AttributeError: print("SKIP") raise SystemExit try: import traceback except: print("SKIP") raise SystemExit def print_exc_info(e, chain=True): print("-" * 72) traceback.print_exception(None, e, e.__traceback__, chain=chain) print("-" * 72) print() try: try: 1 / 0 except Exception as inner: raise RuntimeError() from inner except Exception as e: print_exc_info(e, chain=False) print_exc_info(e) print() try: try: 1 / 0 except Exception as inner: raise RuntimeError() from OSError() except Exception as e: print_exc_info(e) print() try: try: 1 / 0 except Exception as inner: raise RuntimeError() except Exception as e: print_exc_info(e) print() try: try: 1 / 0 except Exception as inner: raise RuntimeError() from None except Exception as e: print_exc_info(e) try: try: raise RuntimeError() except Exception as inner: 1 / 0 except Exception as e: print_exc_info(e) try: try: 1 / 0 except Exception as inner: raise inner except Exception as e: print_exc_info(e, chain=False) print_exc_info(e) print()